HDU 3631(Shortest Path) 最短路问题 (Floyd)
2014-11-13 10:55
429 查看
最短路问题,0 x 操作 如果加入的是未标记的点,利用Floyd 求经过该点的最短路,1 x y 操作就可以读取通过标记点的最短路。
复杂度O(n3),因为Q有点大,如果按一般方法用SPFA或者Dijkstra,估计基本超时,本人较笨,试了下均超时,所以只能用Floyd,O(n3)+O(Q-n)。
Floyd:
复杂度O(n3),因为Q有点大,如果按一般方法用SPFA或者Dijkstra,估计基本超时,本人较笨,试了下均超时,所以只能用Floyd,O(n3)+O(Q-n)。
Floyd:
#include<stdio.h> #include<string.h> #include<stdlib.h> #define INF 0x3f3f3f3f #define MAX_VEREXT 310 int mark[MAX_VEREXT],map[MAX_VEREXT][MAX_VEREXT]; int vex,arc; void Floyd(int s) { int i,j; for(i=0;i<vex;i++) { for(j=0;j<vex;j++) { if(map[i][j]>map[i][s]+map[s][j]) map[i][j]=map[i][s]+map[s][j]; } } } int main() { int i,j,Q,count; int a,b,c; int aa,bb,cc; count=1; while(scanf("%d%d%d",&vex,&arc,&Q)!=EOF) { if(vex==0 && arc==0 && Q==0) break; memset(mark,0,sizeof(mark)); for(i=0;i<MAX_VEREXT;i++) { for(j=0;j<MAX_VEREXT;j++) if(i==j) map[i][j]=0; else map[i][j]=INF; } for(i=0;i<arc;i++) { scanf("%d%d%d",&a,&b,&c); if(map[a][b]>c) map[a][b]=c; } if(count>1) printf("\n"); printf("Case %d:\n",count++); for(i=0;i<Q;i++) { scanf("%d",&aa); if(aa==0) { scanf("%d",&bb); if(mark[bb]==0) { mark[bb]=1; Floyd(bb); } else printf("ERROR! At point %d\n",bb); } else { scanf("%d%d",&bb,&cc); if(mark[bb]==0 || mark[cc]==0) printf("ERROR! At path %d to %d\n",bb,cc); else { if(map[bb][cc]<INF) printf("%d\n",map[bb][cc]); else printf("No such path\n"); } } } } return 0; }
相关文章推荐
- HDU 2112 HDU Today 最短路问题map+floyd
- hdu 3631 Shortest Path(Floyd)
- hdu 3631 Shortest Path (floyd)
- hdu 3631 Shortest Path (floyd)
- HDU 3631 Shortest Path (Floyd的深层理解)
- hdu 3631 Shortest Path【Floyd】
- HDU - 3631 Shortest Path(Floyd最短路)
- hdu 3631 Shortest Path(Floyd)
- hdu 3631 Shortest Path(Floyd)
- hdu 3631 Shortest Path(Floyd)
- HDU2544最短路问题Floyd-warshall Algorithm做法
- hdu 3631 Shortest Path(floyd)
- Hdu 3631 Shortest Path(Floyd插点)
- HDU 5636 关键点的 floyd 最短路问题
- HDU-3631 Shortest Path (floyd)
- HDU - 2544 - 最短路 (最基础单源最短路问题!!dijkstra+floyd+SPFA)
- 【HDU】3631 Shortest Path 【floyd】
- HDU 3631 Shortest Path(Floyd变形)
- HDU 3631 Shortest Path 【floyd的深层理解】
- hdu 3631 Shortest Path (floyd)