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