문제출처: https://www.acmicpc.net/problem/2644
풀이
bfs를 이용하여 풀었습니다. a에서 b로 가는데 연결된 간선의 수가 정답이므로, check[]배열로 방문여부를 확인함과 동시에, 방문된 현재 좌표의 check배열값을 갱신하므로써 정답을 구할 수 있습니다. 주의할것은 14행,15행에서 최대 n=100까지 입력받기 때문에 32행에서 무의식적으로 i=0;i<n으로 조건을 작성하면 틀립니다. 범위 조심하셔야됩니다.
코드
#include<iostream> #include<queue> using namespace std; int map[101][101]; int check[101]; int n, a, b, m, x, y, ans; void bfs(int pos); int main() { cin >> n >> a >> b >> m; for (int i = 0; i < m; i++) { cin >> x >> y; map[x][y] = 1; map[y][x] = 1; } bfs(a); if (check[b] == 0) cout << -1 << endl; else cout << check[b] << endl; } void bfs(int pos) { queue<int>q; q.push(pos); while (!q.empty()) { int temp = q.front(); q.pop(); //조심, i=0;i<n했으면 틀림 for (int i = 1; i <=n; i++) { if(map[temp][i]&&check[i]==0) { check[i] = check[temp] + 1; q.push(i); } } } }
결과
'문제풀이(BOJ) > DFS,BFS' 카테고리의 다른 글
[백준 17836] 공주님을 구해라! (0) | 2020.02.10 |
---|---|
[백준 1759] 암호 만들기 (0) | 2020.02.06 |
[백준 2589] 보물섬(BFS) (0) | 2020.01.17 |
[백준 14502] 연구소 (BFS) (0) | 2020.01.17 |
[백준 2667] 단지번호붙이기 (BFS) (0) | 2020.01.17 |