# 생각

1부터 100까지 연속된 번호에서

주어진 입력의 관계가 주어지기 때문에

정점과 간선이 주어지고 1차원 bfs 탐색을 돌리면 되는 문제이다

 

단, 거리를 구해야 하는 문제이므로

vis배열이 아닌 dist배열을 통해 -1로 초기화를 해주고

촌수를 계산해야하는 시작점 a부터 연결된부분으로 탐색될수록 +1증가를 해주게 되면

b에서의 dist값을 구할 수 있다

탐색이 다 끝난 후 dist값이 -1이면 b지점으로 도달을 하지 못한 것이다

 

 

# 전체 코드

#include <bits/stdc++.h>
using namespace std;

int graph[111][111], dist[111];

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(nullptr);

	int n;	// 전체 사람 수
	cin >> n;
	int a, b;	// 촌수를 계산해야하는 서로 다른 두 사람의 번호
	cin >> a >> b;
	int m;
	cin >> m;
	for (int i = 0; i < m; i++)
	{
		int x, y;
		cin >> x >> y;
		graph[x][y] = 1;
		graph[y][x] = 1;
	}
	fill(dist, dist + n + 1, -1);
	queue<int> q;
	q.push(a);
	dist[a] = 0;	// 시작점
	while (!q.empty())
	{
		auto cur = q.front(); q.pop();
		for (int nxt = 1; nxt <= n; nxt++)
		{
			if (dist[nxt] != -1 or graph[cur][nxt] == 0) continue;
			dist[nxt] = dist[cur] + 1;
			q.push(nxt);
		}
	}
	cout << dist[b];	// 도달했을때의 상태
}

 


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

 

2644번: 촌수계산

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

www.acmicpc.net

'Algorithm > BOJ' 카테고리의 다른 글

[BOJ] 9205_맥주 마시면서 걸어가기 with cpp  (0) 2022.03.09
[BOJ] 2573_빙산 with cpp  (0) 2022.03.08
[BOJ] 2606_바이러스 with cpp  (0) 2022.03.07
[BOJ] 1260_DFS와 BFS with cpp  (0) 2022.03.06
[BOJ] 1003_피보나치 함수 with cpp  (0) 2022.03.05

+ Recent posts