HDU 1385

来源:互联网 发布:微博营销 seo 编辑:程序博客网 时间:2024/06/05 19:06

吐个槽,第一遍的时候竟然是输出受限制,但结果却是对的,后来删了重新敲了一遍,竟然AC了!坑啊!#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int inf=0x3f3f3f3f;const int maxn=505;int mp[maxn][maxn];int pre[maxn][maxn];int cost[maxn];int n;void init(){    int i,j;    for(i=1; i<=n; i++)    {        for(j=1; j<=n; j++)        {            if(i==j)                mp[i][j]=0;            else                mp[i][j]=inf;        }    }}void input(){    int i,j;    int x;    for(i=1; i<=n; i++)    {        for(j=1; j<=n; j++)        {            scanf("%d",&x);            if(x!=-1)                mp[i][j]=x;            pre[i][j]=j;        }    }    for(i=1; i<=n; i++)    {        scanf("%d",&cost[i]);    }}void floyd(){    int k,i,j;   for(k=1; k<=n; k++)   {       for(i=1; i<=n; i++)       {           for(j=1; j<=n; j++)           {               if(mp[i][j]>mp[i][k]+mp[k][j]+cost[k])               {                   mp[i][j]=mp[i][k]+mp[k][j]+cost[k];                   pre[i][j]=pre[i][k];               }               else if(mp[i][j]==(mp[i][k]+mp[k][j]+cost[k]))               {                   if(pre[i][j]>pre[i][k])                   {                       pre[i][j]=pre[i][k];                   }               }           }       }   }}void ff(){    int a,b,i;    while(scanf("%d%d",&a,&b))    {        if(a==-1&&b==-1)            break;        printf("From %d to %d :\n",a,b);        printf("Path: %d",a);        i=a;        while(i!=b)        {            printf("-->%d",pre[i][b]);            i=pre[i][b];        }        printf("\n");        printf("Total cost : %d\n",mp[a][b]);        printf("\n");    }}int main(){    while(scanf("%d",&n),n)    {        init();        input();        floyd();        ff();    }    return 0;}


原创粉丝点击