hdu 1874 畅通工程续 flody
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874
flody 居然没考虑重复边和 从起点和终点是一个点时距离是0的情况 WA了好几次
有重复边的时候最后的距离是最小距离 邻接矩阵初始化的时候 i和j如果相等 map[i][j]=0
又被水题折磨了一个多小时 浪费时间了 什么时候才能不这么二呢??
#include<iostream> #include<cstdio> #define INF 1<<29 #define SIZE 300 using namespace std; int map[SIZE][SIZE]; void floyd(int n) { int i,j,k; for(i=0;i<n;i++) { for(j=0;j<n;j++) { for(k=0;k<n;k++) { if(map[j][k]>=(map[j][i]+map[i][k])) map[j][k]=map[j][i]+map[i][k]; } } } } void init() { int i,j; for(i=0;i<SIZE;i++) { for(j=0;j<SIZE;j++) { if(i!=j)map[i][j]=INF; else map[i][j]=0; } } } int main() { int nroad,ncity,i,length,begin,end; while(scanf("%d %d",&ncity,&nroad)!=EOF) { init(); for(i=0;i<nroad;i++) { scanf("%d %d %d",&begin,&end,&length); if(length<=map[begin][end]&& length<=map[end][begin]) { map[begin][end]=length; map[end][begin]=length; } } floyd(ncity); scanf("%d %d",&begin,&end); if(map[begin][end]==INF) printf("-1\n"); else printf("%d\n",map[begin][end]); } //system("pause"); return 0; }