#include <stdio.h>
int Answer, Map[101][102], Queue[10000], front, rear;
void BFS(int v)
{
int w;
Queue[++rear] = v;
Map[v][101] = 1; // visit 를 대신하는 배열 [2][101]을 기록해둠
while (rear != front)
{
v = Queue[++front];
for (w = 1; w <= 100; ++w)
{
if (Map[v][w])
{
if (!Map[w][101])
{
Queue[++rear] = w; // 새로운 출발점을 queue 에 넣음
Map[w][0] = Map[v][0] + 1; // [][0] 은 거리를 표시하는 장소로 쓰임
Map[w][101] = 1; // w에서 출발하는 것에 대해서 표시해둠
}
}
}
}
}
int main(void)
{
freopen("input.txt", "r", stdin);
int t;
for (t = 1; t <= 10; ++t)
{
int N, Start, i, j, from, to, max = 0;
for (i = 0; i <= 100; ++i)
for (j = 0; j <= 101; ++j)
Map[i][j] = 0;
rear = front = -1, Answer = 0;
scanf("%d %d", &N, &Start);
for (i = 0; i < N / 2; ++i)
{
scanf("%d %d", &from, &to);
Map[from][to] = 1;
}
BFS(Start);
for (i = 1; i <= 100; ++i)
{
if (max < Map[i][0]) // 가장 거리가 긴 것을 찾음
{
max = Map[i][0];
Answer = i;
}
else if (max == Map[i][0]) // 거리가 같다면, 인덱스 숫자가 넣은 것을 찾음
{
if (Answer < i) Answer = i;
}
}
printf("#%d %d\n", t, Answer);
}
return 0;
}
댓글