3 1 0.5 0.5 0.5 1 0.4 0.5 0.4 1 3 1 2 2 3 1 3
0.500 0.400 0.500
#include <iostream> #include <algorithm> #include <cstdio> #include <cstring> using namespace std; #define M 1050 int n,m; double map[M][M],dis[M]; void Dijkstra(int x,int y) { bool v[M]={0}; int i,j; for(i=1;i<=n;i++) dis[i]=(i==x?1:0); for(i=1;i<=n;i++) { int k; double Min=0; //在这里WA了一发,模板打多了就只会int了。 for(j=1;j<=n;j++) if(!v[j] && dis[j]>Min) Min=dis[k=j]; v[k]=1; for(j=1;j<=n;j++) dis[j]=max(dis[j],dis[k]*map[k][j]); } if(dis[y]) printf("%.3lf\n",dis[y]); else printf("What a pity!\n"); } int main() { int i,j; int a,b,c; while(scanf("%d",&n)!=EOF && n) { memset(map,0,sizeof(map)); for(i=1;i<=n;i++) for(j=1;j<=n;j++) { scanf("%lf",&map[i][j]); } //题目给的是邻接矩阵,所以不要初始化了。 scanf("%d",&m); for(i=1;i<=m;i++) { scanf("%d%d",&a,&b); Dijkstra(a,b); } } return 0; }我个人认为用Floyd算法应该也可以,就是时限的问题了。
HDU 1596 find the safest road (最短路),布布扣,bubuko.com
HDU 1596 find the safest road (最短路)
原文:http://blog.csdn.net/qq2256420822/article/details/38542635