[백준-2644] 촌수 계산
in Coding Test on 백준
그래프에 대해 처음 공부할 때 풀어보면 좋은 문제인 것 같다.
물론 DFS로도 풀이할 수 있을 것이다.
Code
#include <iostream>
#include <queue>
using namespace std;
#define MAX 101
int n, p1, p2, m;
int result[MAX];
int family[MAX][MAX];
queue<int> q;
void bfs(int start) {
q.push(start);
while (!q.empty()) {
int now = q.front();
q.pop();
for (int i = 1; i <= n; i++) {
if (family[now][i] == 1 && result[i] == 0) {
result[i] = result[now] + 1;
q.push(i);
}
}
}
}
int main() {
scanf("%d %d %d %d", &n, &p1, &p2, &m);
int a, b;
while (m--) {
scanf("%d %d", &a, &b);
family[a][b] = 1, family[b][a] = 1;
}
bfs(p1);
if (!result[p2])
printf("%d", -1);
else
printf("%d", result[p2]);
return 0;
}