小Biu所在的城市有n个景点,有一些景点之间有单向联通的道路,现在小Biu在1号景点上,他想知道到达除了1号景点之外的每个景点分别最少需要经过多少条道路?
如图所示为样例数据,可以知道小Biu到达2号景点的最短路线为(1-2),到达3号景点的最短路线为(1-3),到达4号景点的最短路线为(1-2-4),到达5号景点的最短路线为(1-3-5),到达6号景点的最短路线为(1-3-5-6).所以答案分别为(1,1,2,2,3)
输入
第1行:两个正整数n,m,n表示景点的个数,m表示路径的条数。(1<=n<=1000,1<=m<=3000)
第2行-第m+1行:每行两个u,v,表示u到v有一条单向联通的道路,数据保证没有重边和自环。(1<=u,v<=n)
输出
输出n-1行,第i行表示从1号景点到达(i+1)号景点最少要经过几条道路,如果不能到达则输出-1。
输入样例
6 6
1 2
1 3
2 4
3 2
3 5
5 6
输出样例
1
1
2
2
3
#include<bits/stdc++.h>
using namespace std;
int G[1010][1010];
int main()
{
ios::sync_with_stdio(false);
int n,m,s,e,w,ans=0,tip;
cin>>n>>m;
memset(G,0x3f3f3f3f,sizeof(G));
for(int i=1;i<=n;i++) G[i][i]=0;
for(int i=1;i<=m;i++)
{
cin>>s>>e;
G[s][e]=1;
}
for(int k=1;k<=n;k++)
for(int j=1;j<=n;j++)
G[1][j]=min(G[1][j],G[1][k]+G[k][j]);
for(int i=2;i<=n;i++)
if(G[1][i]>=0x3f3f3f3f) cout<<-1<<endl;
else
cout<<G[1][i]<<endl;
return 0;
}