관리 메뉴

기억을 위한 기록들

[백준 2644: 촌수계산] - C++ 본문

Coding Test - cpp/DFS

[백준 2644: 촌수계산] - C++

에드윈H 2021. 1. 21. 15:05

www.acmicpc.net/problem/2644

 

2644번: 촌수계산

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

www.acmicpc.net

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

int target1;
int target2;
int cnt;
vector<int> info[100];
bool checkArr[100];
bool bIsSuc = false;
int resultCnt = 9999;


void D(int _n)
{
	if (_n == target2)
	{
		bIsSuc = true;
		if (cnt < resultCnt)
			resultCnt = cnt;		
	}
	else
	{
		for (int i = 0; i < info[_n].size(); i++)
		{
			int nextTarget = info[_n][i];
			if (checkArr[nextTarget] == false)
			{
				checkArr[nextTarget] = true;
				cnt++;
				D(nextTarget);
				cnt--;
				checkArr[nextTarget] = false;
			}
		}
	}
}
int main()
{
	cin.tie(NULL);
	ios_base::sync_with_stdio(false);
	int totalPeople;
	cin >> totalPeople;

	cin >> target1 >> target2;


	int n2;
	cin >> n2;
	int input1;
	int input2;

	for (int i = 0; i < n2; i++)
	{
		cin >> input1 >> input2;

		info[input1].push_back(input2);
		info[input2].push_back(input1);
	}


	checkArr[target1] = true;
	D(target1);

	if(bIsSuc)
		cout << resultCnt << endl;
	else
	{
		cout << -1 << endl;
	}
	return 0;
}

'Coding Test - cpp > DFS' 카테고리의 다른 글

[백준 1743: 음식물 피하기] - C++  (0) 2021.02.04
[백준 13565: 침투] - C++  (0) 2021.02.01
[백준 11725 : 트리의 부모 찾기] - C++  (0) 2021.01.21
[백준 2606 : 바이러스] - C++  (0) 2021.01.11
미로탐색(DFS)  (0) 2021.01.08