POJ 2472 &&ZOJ 2797 (106 miles to Chicago)
2015-01-25 21:31
411 查看
链接:click here
题意:
Elwood和Jack要从the Palace Hotel(顶点1)尽量躲避警察的追捕,驾车到Chicago(顶点n)。现在有n个顶点,m条边,给出在每条边上不被警察追捕到的几率,问最终Elwood和Jack能安全到达Chicago而不被警察追捕到的最大概率是多少。
思路:就是求从起点到终点的最小概率 floyd 算法(也可以用逆向的dijkstra要求的不是最小的,而是最大的。),涉及到概率,注意一下精度。
参考代码;
题意:
Elwood和Jack要从the Palace Hotel(顶点1)尽量躲避警察的追捕,驾车到Chicago(顶点n)。现在有n个顶点,m条边,给出在每条边上不被警察追捕到的几率,问最终Elwood和Jack能安全到达Chicago而不被警察追捕到的最大概率是多少。
思路:就是求从起点到终点的最小概率 floyd 算法(也可以用逆向的dijkstra要求的不是最小的,而是最大的。),涉及到概率,注意一下精度。
参考代码;
#include <iostream> #include <string> #include <cstdio> #include <cstring> #include <cstdlib> #include <algorithm> #include <cmath> #include <vector> using namespace std; double cost[101][101]; int i,j,k,m,n,x,y,p; void floyd() { for(k=1; k<=n; k++) for(i=1; i<=n; i++) for(j=1; j<=n; j++) if(cost[i][j]<cost[i][k]*cost[k][j]) //注意是乘法 cost[i][j]=cost[i][k]*cost[k][j]; } void init() { for(i=1; i<=n; i++) for(j=1; j<=n; j++) { if(i==j) cost[i][j]=1; else cost[i][j]=0; } } void read() { scanf("%d",&m); for(i=1; i<=m; i++) { scanf("%d%d%d",&x,&y,&p); cost[x][y]=cost[y][x]=(double)p/100; } } int main() { while(cin>>n&&n) { init(); read(); floyd(); printf("%.6lf percent\n",cost[1] *100); } return 0; }
相关文章推荐
- ZOJ 2797 POJ 2472 106 miles to Chicago
- zoj 2792 && poj 2472 106 miles to Chicago
- poj 2472 106 miles to Chicago a->b有安全概率,求i->j安全概率最大的一条路
- POJ 2472 ||SDUT 2358 106 miles to Chicago(Dijkstra算法变形)
- poj 2472--106 miles to Chicago-最短路flody
- POJ 2472 106 miles to Chicago(Dijstra变形——史上最坑的最长路问题)
- poj 2472 106 miles to Chicago
- POJ 2472 106 miles to Chicago(Floyd)
- poj 2472 106 miles to Chicago
- poj 2472 106 miles to Chicago
- zoj - 2797 - 106 miles to Chicago
- ZOJ 2797 106 miles to Chicago
- (floyed反求最长路径)ZOJ 2797 106 miles to Chicago
- POJ 2472 106 miles to Chicago
- zoj - 2797 - 106 miles to Chicago
- Poj 2472 106 miles to Chicago【Floyd】
- ZOJ 2797 106 miles to Chicago
- POJ 2472 106 miles to Chicago
- POJ-2472 106 miles to Chicago
- poj 2472 106 miles to Chicago