백준 2644 - 촌수 계산 (실버2)
방향 없는 그래프가 주어졌을 때, 연결 요소 (Connected Component)의 개수를 구하는 프로그램을 작성해보자
DFS또는 BFS알고리즘을 이용하면 쉽게 풀 수 있는 문제다.
#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <cstring>
#include <stack>
#include <queue>
#include <deque>
using namespace std;
int n, m, v;
int vis[1010];
queue <int> q;
int a, b, x, y;
vector <int> adj[1005];
void bfs(int node) {
q.push(node);
while (!q.empty()) {
int now = q.front();
q.pop();
if (now == y) break; //현재 노드의 번호가 y와 같다면 break한다.
for (int i = 0; i < adj[now].size(); i++) {
int next = adj[now][i];
if (!vis[next]) {
vis[next] = vis[now] + 1; //촌수계산
q.push(next);
}
}
}
if (vis[y] != 0) {
printf("%d\n", vis[y]);
}
else {
printf("-1");
}
}
int main(void) {
scanf("%d", &n); //노드의 수
scanf("%d %d", &x, &y); //노드의 번호가 x와 y인 사람의 촌수 구하기
scanf("%d", &m); //입력받는 횟수
for (int i = 1; i <= m; i++) {
scanf("%d %d", &a, &b);
adj[a].push_back(b);
adj[b].push_back(a);
} //무방향 그래프 이므로 양쪽에 넣어준다.
bfs(x); //BFS시작
return 0;
}
PREVIOUS[C/C++]백준 1260
NEXT[C/C++]백준 20920