[C/C++]백준 2644

 

백준 2644 - 촌수 계산 (실버2)

2644 문제 링크

방향 없는 그래프가 주어졌을 때, 연결 요소 (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;
	
}