soj 2427 Daizi's path system(最短路,用floyd实现的)

http://202.115.37.2:8080/soj/source.action?id=445103

#include <stdio.h>
#define INF 0xfffffff
int map[201][201];
void Floyd(int n)
{
registerint i,k,j;
for (k=0;k<n;k++)
{
  for (i=0;i<n;i++)
   {
   if (i!=k)
    for (j=0;j<n;j++)
     {
      if (i!=j && j!=k&&(map[i][k] + map[k][j] <map[i][j]))
         map[i][j]=map[i][k] + map[k][j];
     }
   }
}
}
int main()
{
   int i,j;
   int n,m,a,b,val,star,end,k;
   while (scanf("%d%d",&n,&m)!=EOF,n)
   {
    for (i=0;i<n;i++)
     for (j=0;j<n;j++)
     {
       if (i==j)
          map[i][j]=0;
      else
        map[i][j]=INF;
    }  
   for (i=0;i<m;i++)
    {
     scanf("%d%d%d",&a,&b,&val);
    if(val < map[a-1][b-1])  注意这句:因为路比较多,要去最短的路
      map[a-1][b-1]=map[b-1][a-1]=val;
    }
    Floyd(n);
    scanf("%d",&k);
   while(k--){
      scanf("%d%d",&star,&end); 
     if(map[star-1][end-1] < INF)
         printf("%d\n",map[star-1][end-1]);
     else
        printf("pity\n");
    }
    printf("\n");
}
return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值