/*
【题目来源】
http://soj.me/show_problem.php?pid=1004&cid=567
【题目分析】
与longth way 类似
这个好象就是传说中的六度人脉,你只要通过六度人脉就可以找到世界上的任何一个人。
假设一个人一生会认识N个人,那N+N^1+N^2+N^3+N^4+N^5+N^6>=世界总人数。
给定一些边确定一个图,即给定一些点之间的连通情况,求出各点到0的最短路径
【思路分析】
1.邻接表构图
2.以0为树根,层次遍历,求出其他各点的深度 即为所求
【小小心得】
刚开始还去用struct表示Node
其实只用一个邻接表就行了 邻接表果然好东西呀~
*/
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
#define Max 101
int main()
{
int m;
cin >> m;
while (m--)
{
int n;
cin >> n;
vector<int> v[Max];
//建表
int temp1, temp2;
for (int i = 0; i < n; ++i)
{
cin >> temp1 >> temp2;
v[temp1].push_back(temp2);
v[temp2].push_back(temp1);
}
int layer[Max] = {0};//深度
bool visit[Max] = {0};//是否被访问过
queue<int> q;
q.push(0);
while (!q.empty())
{
int current = q.front();
q.pop();
for (int i = 0; i < v[current].size(); ++i)
{
if (!visit[v[current][i]])
{
layer[v[current][i]] = layer[current]+1;//深度相对+1
visit[v[current][i]] = 1;//已访问
q.push(v[current][i]);
}
}
}
for (int i = 1; i < Max; ++i)
if (layer[i]) cout << i << ":" << layer[i] << endl;
cout << "---" << endl;
}
}