-
[BOJ]백준 11403번: 경로 찾기Problem Solving/BOJ(백준) 2019. 7. 5. 23:03
BFS 혹은 DFS 입문자가 풀면 좋을 기초 문제
https://www.acmicpc.net/problem/11403
방향 그래프가 주어졌을 때, 임의의 정점 (i,j)의 경로 조합을 인접행렬을 사용해서 출력하는 프로그램
bfs의 핵심은, ① 큐를 사용한다 ② 이동 가능하다면 바로 방문 체크
인데, BFS를 잘 모르는 초심자가 풀기 좋은 문제라고 생각한다.
#include <cstdio> #include <queue> #include <memory.h> using namespace std; int n; bool g[101][101], visit[101]; queue<int> q; bool bfs(int node, int d) { visit[node] = true; q.push(node); while (!q.empty()) { int cur = q.front(); q.pop(); for(int i=0;i<n;i++) if (g[cur][i] && (!visit[i]||i==node)) { visit[i] = true; q.push(i); if (i == d) return true; } } return false; } int main() { scanf("%d", &n); for (int i = 0; i < n; i++) for (int j = 0; j < n; j++)scanf("%d", &g[i][j]); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { printf("%d ", bfs(i, j)); memset(visit, false, sizeof(visit)); while (!q.empty())q.pop(); } printf("\n"); } return 0; }
단순 BFS를 구현하고, 임의의 i,j에 대해 이중 for문을 통해 경로가 존재하는지 검사한 다음 출력해주면 끝!
'Problem Solving > BOJ(백준)' 카테고리의 다른 글
[BOJ]백준 9663번: N-Queen (2) 2019.08.14 [BOJ]백준 15353번: 큰 수 A + B (2) (420) 2019.07.10 [BOJ]백준 16198번: 에너지 모으기 (418) 2019.06.24 [BOJ]백준 17254번: 키보드 이벤트 (451) 2019.06.23 [BOJ]백준 17144번: 미세먼지 안녕! (440) 2019.06.23