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<cstdio> #include<cstring> #define max(x,y) (x>y?x:y) const int INF=0x3f3f3f3f; int n,m; double map[1010][1010]; double dis[1010]; bool vis[1010]; void dij(int s) { memset(dis,0,sizeof(dis)); memset(vis,false,sizeof(vis)); dis[s]=1; while(true) { int v=-1; for(int i=1;i<=n;i++) if(!vis[i]&&(v==-1||dis[v]<dis[i])) v=i; if(v==-1) break; vis[v]=true; for(int j=1;j<=n;j++) dis[j]=max(dis[j],dis[v]*map[v][j]); } } int main() { double a; memset(map,0,sizeof(map)); while(scanf("%d",&n)!=EOF) { for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) scanf("%lf",&map[i][j]); scanf("%d",&m); int x,y; while(m--) { scanf("%d%d",&x,&y); dij(x); if(dis[y]<1e-6) printf("What a pity!\n"); else printf("%.3lf\n",dis[y]); } } return 0; }
版权声明:博主情人,外人误碰!!!
hdoj 1596 find the safest road 【dijkstra】
原文:http://blog.csdn.net/qq_21654717/article/details/47731861