HDU 1596 单源最短路径
来源:互联网 发布:常用服务器端口有哪些 编辑:程序博客网 时间:2024/05/16 05:56
///dijkstra算法#include<iostream>#include<string>#include<cstring>#include<algorithm>#include<cstdio>#include<cmath>#include<cctype>#include<iomanip>using namespace std;const int inf=10000000;const int maxn=1003;double f[maxn][maxn];int n;double dijkstr(int s,int e){ double dis[maxn]; int v[maxn]; for(int i=1;i<=n;++i) dis[i]=f[i][s],v[i]=0; while(1){ double max=-100; int mj=-1; for(int i=1;i<=n;++i) if(!v[i]&&dis[i]>max) max=dis[i],mj=i; v[mj]=1; if(mj==e || mj<0) break; for(int i=1;i<=n;++i) if(!v[i] && dis[i]<dis[mj]*f[i][mj]) dis[i]=dis[mj]*f[i][mj];///这里是dijkstra算法与prim算法的区别 } return dis[e];}int main(){ while(scanf("%d",&n)!=EOF){ for(int i=1;i<=n;++i) for(int j=1;j<=n;++j) scanf("%lf",&f[i][j]),f[j][i]=f[i][j]; int m; scanf("%d",&m); for(int i=0,a,b;i<m;++i){ scanf("%d%d",&a,&b); if(a==b) printf("1.000\n"); if(dijkstr(a,b)>0) printf("%.3lf\n",dijkstr(a,b)); else printf("What a pity!\n"); } } return 0;}