在此,C语言代码奉上。还有题目的链接 https://atcoder.jp/contests/abc168/tasks/abc168_d
#include<stdio.h> #include<stdlib.h> #define size 100001 int N,M; int*dist[size]; int city[size]; int qu[size]; int dist_s[size]; void set(){ int a,b; for(int i=0;i<N;i++){ city[i]=-1; dist_s[i]=0; }; city[0]=0; for(int i=0;i<M;i++){ scanf("%d %d",&a,&b); a--;b--; dist[a]=realloc(dist[a],sizeof(int)*(dist_s[a]+1)); dist[a][dist_s[a]]=b;//得出由a城到b城的所有可能路径 dist_s[a]++; dist[b]=realloc(dist[b],sizeof(int)*(dist_s[b]+1)); dist[b][dist_s[b]]=a; dist_s[b]++; }; }; void sys(){ int tar=0,nm=0,ji=0; while(1){ for(int i=0;i<dist_s[tar];i++){//到目标城市的所有可能 if(city[dist[tar][i]]!=-1)continue; city[dist[tar][i]]=tar+1;//目标城市深度 qu[nm]=dist[tar][i];//到达深度的各城市队列 nm++; }; if(nm==ji)break; tar=qu[ji];//计算队列中第一个城市 ji++; }; }; int main(void){ scanf("%d%d",&N,&M); set(); sys(); printf("Yes\n"); for(int i=1;i<N;i++){ printf("%d\n",city[i]); }; return 0; }
原文:https://www.cnblogs.com/cryforbrightfuture/p/12920172.html