알고리즘&자료구조/문제

[BOJ] 2644 촌수계산 C++

Nakuri 2023. 2. 3. 07:38
728x90

개요

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

 

2644번: 촌수계산

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

www.acmicpc.net

실버급 DFS 및 BFS 기본 문제다.

본문

풀이

연습해 볼 겸 인접행렬로 구현해 봤다.

스택을 활용한 DFS로 풀려고 한참 고민했는데, 카운트하는 부분에서 계속 막혔다.

그래서 재귀로 DFS를 구현했더니 바로 풀렸다,,내 시간

스택으로도 풀 수 있을 것 같은데 조금 더 복잡해질 듯하다.

주의할 점으로는 연결되지 않는 상황(-1 출력)을 고려해야 한다.

코드

#include<iostream>
#include<algorithm>
using namespace std;
constexpr int RANGE = 102;

bool fam[RANGE][RANGE]{};
bool visited[RANGE]{};
int from, to;
int n, m;
int ans = -1;

void dfs(int v, int cnt) {
	if (v == to) {
		ans = cnt;
		return;
	}
	for (int i = 1; i <= n; i++)
	{
		if (fam[v][i] && !visited[i])
		{
			visited[i] = true;
			dfs(i, cnt + 1);
		}
	}
}

int main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0);

	cin >> n >> from >> to >> m;

	for (int i = 1; i <= m; i++)
	{
		int x, y;
		cin >> x >> y;
		fam[y][x] = fam[x][y] = true;
	}
	dfs(from, 0);
	cout << ans;
}

 

'알고리즘&자료구조 > 문제' 카테고리의 다른 글

[BOJ] 9375 패션왕 신해빈 C++  (0) 2023.02.03
[BOJ] 2178 미로탐색 C++  (0) 2023.02.03
[BOJ] 2309 일곱 난쟁이 C++  (0) 2023.02.02
[BOJ] 1260 DFS와 BFS C++  (0) 2023.02.02
[BOJ] 2606 바이러스 C++  (0) 2023.02.02