가장 먼 노드

108번뇌·2021년 8월 26일

#include <string>
#include <vector>
#include <queue>

int chk[20001] = { 0, };
int arr[20001][20001] = { 0, };
int Dist[20001] = { 0, };

using namespace std;

int solution(int n, vector<vector<int>> edge) {


	int Max(0);
	int answer = 0;

	for (int i = 0; i < edge.size(); i++)
	{
		int Front = edge[i][0];
		int Back = edge[i][1];
		arr[Front][Back] = 1;
		arr[Back][Front] = 1;
	}

	queue<int> qTemp;
	qTemp.push(1);
	chk[1] = 1;
	while (!qTemp.empty())
	{
		int x = qTemp.front();
		qTemp.pop();
		for (int i = 1; i <= n; i++)
		{
			if (chk[i] == 0 && arr[x][i] == 1)
			{
				chk[i] = 1;
				qTemp.push(i);
				Dist[i] = Dist[x] + 1;
				if (Dist[i] > Max)     Max = Dist[i];
			}
		}
	}


	for (int i = 0; i <= n; i++)
	{
		if (Dist[i] == Max)
		{
			answer++;
		}
	}

	return answer;
}

int main()
{
	vector<vector<int>> vTemp = { {3, 6}, {4, 3},{3, 2},{1, 3},{1, 2},{2, 4},{5, 2} };
	int iTemp = solution(6, vTemp);

	return 0;
}

이런식으로 BFS로 풀 수 있음.
1 -> 2,3 -> 2에서 4,5(2pop) ->3에서 6(3pop)하며 거리업데이트

profile
내일 아침 눈을 떳을 때, '기대되는 오늘 하루를 만들기 위해' 나는 오늘도 생각하고 고민한다.

0개의 댓글