1016 Problem P
来源:互联网 发布:手机硬件修复软件 编辑:程序博客网 时间:2024/05/21 19:46
题意:不同城市之间一条或多条飞行通道,但是并不是所有的路都是很安全的,每一条路有一个安全系数s,s是在 0 和 1 间的实数(包括0,1),一条从u 到 v 的通道P 的安全度为Safe(P) = s(e1)*s(e2)…*s(ek) e1,e2,ek是P 上的边 ,现在8600 想出去旅游,面对这这么多的路,他想找一条最安全的路。
思路:寻找最为安全的道路,即安全系数乘积的最大值,使用spfa算法。
感想:还是要多尝 去试不同的算法解题,找到最好的方法。
#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
int n,m,s,e,front,rear;
double map[1005][1005],dis[1005];
int v[1005],q[1000001];
void spfa(){
int p;
while(front<rear){
p=q[front++];
v[p]=0;
for(int i=0;i<n;i++){
if(map[p][i]==0||p==i)
continue;
if(dis[p]*map[p][i]>dis[i]){
dis[i]=dis[p]*map[p][i];
if(!v[i]){
q[rear++]=i;
v[i]=1;
}
}
}
}
}
int main(){
while(scanf("%d",&n)!=EOF){
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
scanf("%lf",&map[i][j]);
scanf("%d",&m);
while(m--){
scanf("%d%d",&s,&e);
memset(v,0,sizeof(v));
memset(dis,0,sizeof(dis));
v[s-1]=dis[s-1]=1;
front=0;
rear=1;
q[front]=s-1;
spfa();
if(dis[e-1]!=0)
printf("%.3lf\n",dis[e-1]);
else
printf("What apity!\n");
}
}
return 0;
}
- 1016 Problem P
- 1016 Problem P
- 1016 Problem P
- 1016 Problem P
- Problem P
- Problem P
- Problem P
- Problem P
- Problem P
- Problem-P
- Problem P
- 贪心算法 problem P(1016)
- ACM-problem P
- 专题一 Problem P
- 专题三 Problem P
- 动态规划 problem P
- 练习三 Problem P
- 2016SDAU课程练习三1016 Problem P
- 程序员的走与留?
- collectd监控应用cpu使用情况
- 文章标题
- 欢迎使用CSDN-markdown编辑器
- typedef在函数回调上面的应用
- 1016 Problem P
- mysql基础---基础SQL语句
- APP开发实战79-Fragment和Activity比较
- 教你手工检测SQL注入
- The entitlements specified in your application’s Code Signing Entitlements file do not match those s
- hibernate插入数据库乱码的两种解决方式
- Ubuntu安装git时出现问题
- gops-企业级集中身份认证及授权管理实践freeipa
- erlang模块化对象用法