思路:此题就是简单的BFS遍历图
#include<iostream>
#include<vector>
#include<queue>
#include<cstring>
#include<stdio.h>
using namespace std;
const int Max_Size=1000+10;
vector<int> p[Max_Size]; //节点表
int dp[Max_Size];
void init()
{
memset(dp,-1,sizeof(dp)); //初始化计数的数组,同时作为标志数组使用
}
void bfs(int u)
{
queue<int> q; //用队列实现广度优先搜索
dp[u]=0;
q.push(u);
while(!q.empty())
{
int temp=q.front();
q.pop();
for(int i=0;i<p[temp].size();i++)
{
if(dp[p[temp][i]]==-1)
{
q.push(p[temp][i]);
dp[p[temp][i]]=dp[temp]+1;
}
}
}
}
int main()
{
init();
int n,m,c;
scanf("%d %d %d",&n,&m,&c);
for(int i=0;i<m;i++)
{
int a,b;
scanf("%d %d",&a,&b);
p[a].push_back(b);
p[b].push_back(a);
}
bfs(c);
for(int i=1;i<=n;i++)
{
cout<<dp[i]<<endl;
}
return 0;
}