hdu 1874 畅通工程续(最短路floyd)
2014-03-24 12:06
411 查看
题意是给两城市间的几条路,最后求城市star到城市end的最短路的距离,若到不了输出-1。
刚开始接触最短路。
因为求的是任意两点间的最短路,所以选择floyd求最短路。
易出错的地方是城市 i 到 j 不一定只有一条路,所以要加入一个判断。
代码:
刚开始接触最短路。
因为求的是任意两点间的最短路,所以选择floyd求最短路。
易出错的地方是城市 i 到 j 不一定只有一条路,所以要加入一个判断。
代码:
#include<stdio.h> #include<algorithm> using namespace std; const int INF=1 << 29; //inf要足够大 const int MaxN=201; int N,M,g[MaxN][MaxN]; void floyd() { for(int k=0; k<N; ++k) for(int i=0; i<N; ++i) for(int j=0; j<N; ++j) g[i][j]=min(g[i][j],g[i][k]+g[k][j]); } int main() { int i,j,tmp; int star,end; while(scanf("%d%d",&N,&M)!=EOF) { for(int i=0; i<MaxN; i++) for(int j=0; j<MaxN; j++) g[i][j]=INF; for(int i=0; i<MaxN; i++) g[i][i]=0; for(int k=1; k<=M; k++) { scanf("%d%d%d",&i,&j,&tmp); if(tmp<g[i][j]) //debug 开始的时候没判断。WA,错误原因在于有可能城市 0到1 有好多条路,取最短的那条。 { g[i][j]=tmp; g[j][i]=tmp; } } scanf("%d%d",&star,&end); floyd(); if(g[star][end]<INF) printf("%d\n",g[star][end]); else printf("-1\n"); } return 0; }
相关文章推荐
- HDU 1874 畅通工程续 (floyd,dijkstra)(最短路)
- HDU 1874--畅通工程续【最短路 && floyd && 水题】
- HDU-1874-畅通工程续(最短路,FLOYD)
- HDU 1874 畅通工程续(最短路 Floyd)
- hdu 1874 畅通工程续 最短路 DIS 和 FLOYD
- HDU - 1874 - 畅通工程续(最短路,Floyd,图论基础题)
- hdu 1874 畅通工程续 ( 最短路(dij/floyd))
- hdu 1874 畅通工程续(最短路)
- hdoj 1874 畅通工程续 【最短路&&floyd】
- HDU_1874 畅通工程续(Floyd)
- HDU 1874 畅通工程续 【最短路】
- HDU 1874 畅通工程续【最短路,Dijkstra算法+spfa算法】
- HDU 1874 畅通工程续 -- 全源最短路
- hdu 1874 畅通工程续(最短路)
- hdu 1874畅通工程续 floyd
- hdu 1874 畅通工程续(最短路spfa)
- HDU 1874 畅通工程续 (Dijkstra , Floyd , SPFA, Bellman_Ford 四种算法)
- HDU 1874-畅通工程续(floyd&&Dijkstra)
- HDU1874--畅通工程续--最短路
- HDU 1874:畅通工程续【Dijkstra & SPFA & Floyd】