2600 小Biu的旅行(floyed)

小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;
}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值