본문 바로가기

Algorithm/BAEKJOON

[BOJ] 2644번 촌수계산 (C++)

728x90
반응형

https://www.acmicpc.net/problem/2644

 

2644번: 촌수계산

사람들은 1, 2, 3, …, n (1 ≤ n ≤ 100)의 연속된 번호로 각각 표시된다. 입력 파일의 첫째 줄에는 전체 사람의 수 n이 주어지고, 둘째 줄에는 촌수를 계산해야 하는 서로 다른 두 사람의 번호가 주어

www.acmicpc.net

 

#include <iostream>
#include <queue>
using namespace std;

int n, m;
int map[101][101];
int visit[101];
int depth[101];

void bfs(int start){
	visit[start] = 1;
	
	queue<int> q;
	q.push(start);
	while(!q.empty()){
		int node = q.front();
		q.pop();
		visit[node] = 1;
		
		for(int i = 1; i <= n; i++){
			if(!visit[i] && map[node][i] == 1){
				q.push(i);
				visit[i] = 1;
				depth[i] = depth[node] + 1;
			}
		}
	}
}

int main() {
	int a, b, x, y;
	cin >> n;
	cin >> a >> b;
	
	cin >> m;
	for(int i = 0; i < m; i++){
		cin >> x >> y;
		map[x][y] = map[y][x] = 1;
	}
	
	bfs(a);
	
	if(depth[b] == 0) cout << -1 << endl;
	else cout << depth[b] << endl;
	
	return 0;
}
728x90
반응형