ZOJ3166-Lazy Tourist

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3166

#include<stdio.h>
#include<string.h>
#define INF 0xfffffff
#define N 102
int map[N][N],hot[N],n,min,c;
void floyd()
{
    int i,j,k,t;
    for(k=1;k<=n;k++)
       for(i=1;i<=n;i++)
          for(j=1;j<=n;j++)
             if(map[i][j]>map[i][k]+map[k][j]&&map[i][k]!=INF&&map[k][j]!=INF)
                map[i][j]=map[i][k]+map[k][j];
    for(i=1,t=-1,min=INF;i<=c;i++)
       if(map[hot[i]][hot[i]]<min) 
          min=map[t=hot[i]][hot[i]];
    if(t==-1)
       printf("I will nerver go to that city!\n");
    else 
       printf("%d\n",t);
}
int main(void)
{
    int i,j,m,a,b,d;
    while(scanf("%d%d",&n,&c)!=EOF)
    {
        for(i=1;i<=n;i++)
            for(j=1;j<=n;j++)
                map[i][j]=INF;
        for(i=1;i<=c;i++) 
            scanf("%d",&hot[i]);
        scanf("%d",&m);
        for(i=1;i<=m;i++)
        {
            scanf("%d%d%d",&a,&b,&d);
            if(map[a][b]>d)
               map[a][b]=d;
        }
        floyd();
    }
    return 0;
}
posted @ 2012-08-30 18:23  Yogurt Shen  阅读(221)  评论(0编辑  收藏  举报