标签:
回顾一下。。
直接用dijkstra算法。。
#include <cstdio> #include <iostream> #include <algorithm> #include <cstring> using namespace std; double G[1010][1010];//二维数组的存储 int n,s,t;// void dijkstra(int s,int t) { bool vis[1010]; double dis[1010];//保存最安全路径; int i,j,k; for(int i=1;i<=n;i++) dis[i]=G[s][i]; memset(vis,false,sizeof(vis)); dis[s]=0; vis[s]=true; for(i=1;i<n;i++) { k=-1; for(j=1;j<=n;j++) { if(!vis[j]&&(k==-1||dis[k]<dis[j])) k=j; } if(k==-1) //图不连通 break; vis[k]=true; for(j=1;j<=n;j++) if(!vis[j]&&dis[j]<dis[k]*G[k][j]) dis[j]=dis[k]*G[k][j]; } if(dis[t]) printf("%.3lf\n",dis[t]); else printf("What a pity!\n"); } int main() { while(~scanf("%d",&n)) { int x; for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { scanf("%lf",&G[i][j]); } } scanf("%d",&x); while(x--) { scanf("%d%d",&s,&t); dijkstra(s,t); } } return 0; }
标签:
原文地址:http://www.cnblogs.com/WDKER/p/5502298.html