HDU3631-Shortest Path

http://acm.hdu.edu.cn/showproblem.php?pid=3631

#include<iostream>
#include<cstdio>
#include<cstring>
#define INF 0x3f3f3f3f
#define n 305
using namespace std;
int map[n][n],M,N,Q;
bool used[n]; 
inline void floyd(int k)
{
    int i,j;
    for(i=0;i<M;i++)
       for(j=0;j<M;j++)
          if(map[i][j]>map[i][k]+map[k][j])
             map[i][j]=map[i][k]+map[k][j];
}
int main(void)
{
    int WW,i,j,k,m,x,y,z,w=1; 
    while(scanf("%d%d%d",&M,&N,&Q),M,N,Q)
    {
        if(w>1)
           printf("\n");
        printf("Case %d:\n",w);
        w++;
        memset(map,INF,sizeof(map));
        memset(used,false,sizeof(used));
        for(i=0;i<N;i++)
        {
            scanf("%d%d%d",&x,&y,&z);
            if(map[x][y]>z)
               map[x][y]=z;
        }
        for(i=0;i<M;i++)
           map[i][i]=0;
        for(WW=0;WW<Q;WW++)
        {
            scanf("%d",&x);
            if(x==0)
            {
                scanf("%d",&y);
                if(used[y])
                   printf("ERROR! At point %d\n",y);
                else
                {
                    used[y]=true;
                    floyd(y);
                }
            }
            else
            {
                scanf("%d%d",&y,&z);
                if(!used[y]||!used[z])
                   printf("ERROR! At path %d to %d\n",y,z);
                else 
                {
                    if(map[y][z]==INF)
                       printf("No such path\n");
                    else
                       printf("%d\n",map[y][z]);
                }
            }
        }
     
     }
     return 0;
}
posted @ 2012-08-30 20:08  Yogurt Shen  阅读(171)  评论(0编辑  收藏  举报