여러 사람들에 대한 부모 자식들 간의 관계가 주어졌을 때, 주어진 두 사람의 촌수를 계산하는 프로그램을 작성하시오.
그래프 이론
그래프 탐색
BFS
DFS
BFS
로 풀면 된다. 문제에서 7
과 3
의 관계를 알고자 한다면, 7
부터 BFS
하면서 레벨을 더해가고, 3
에 도달했을때 최종 레벨을 출력하면 된다.
큐가 비어서 BFS
가 끝났는데도 찾지 못했다면, -1
을 출력한다.
#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <map>
#include <queue>
using namespace std;
bool visited[101];
int main()
{
int n, m, temp, qsize;
int s, e, in1, in2, res = 1;
multimap<int, int> mm;
queue<int> q;
cin >> n;
cin >> s >> e >> m;
for (int i = 0; i < m; i++) {
scanf("%d%d", &in1, &in2);
mm.insert({ in1,in2 });
mm.insert({ in2,in1 });
}
q.push(s);
visited[s] = true;
while (!q.empty()) {
qsize = q.size();
for(int i = 0; i < qsize; i++) {
temp = q.front();
q.pop();
auto range = mm.equal_range(temp);
for (auto& it = range.first; it != range.second; it++) {
if (!visited[it->second]) {
if (it->second == e) {
printf("%d", res);
return 0;
}
visited[it->second] = true;
q.push(it->second);
}
}
}
res++;
}
printf("-1");
return 0;
}