
#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)하며 거리업데이트