find the safest road HDU杭电1596【Dijkstra || SPFA】
pid=1596">http://acm.hdu.edu.cn/showproblem.php?pid=1596
可是8600 的数学不好。想请你帮忙 ^_^
第一行:n。n表示城市的个数n<=1000;
接着是一个n*n的矩阵表示两个城市之间的安全系数,(0能够理解为那两个城市之间没有直接的通道)
接着是Q个8600要旅游的路线,每行有两个数字。表示8600所在的城市和要去的城市
其它的输出这两个城市之间的最安全道路的安全系数,保留三位小数。
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
SPFA
#include <cstdio>
#include <cstring>
#include <queue>
#define MAXN 1100
using namespace std; double map[MAXN][MAXN];
int vis[MAXN];//推断是否增加队列了
int num;
double low[MAXN];//存最短路径
int s, e;
int M, N;
void SPFA()
{
int i, j;
queue<int> Q;
memset(low, 0, sizeof(low));
memset(vis, 0, sizeof(vis));
vis[s] = 1;
low[s] = 1;
Q.push(s);
while(!Q.empty())
{
int u = Q.front();
Q.pop();
vis[u] = 0;//出队列了,不在队列就变成0
for(i = 1; i <= N; ++i)
{ if(low[i] < low[u] * map[u][i])
{
low[i] = low[u] * map[u][i];
if(!vis[i])
{
vis[i]=1;
Q.push(i);
}
}
}
}
if(low[e] == 0) printf("What a pity!\n");
else printf("%.3f\n",low[e]);
}
int main()
{
int u, v;
double w; while(~scanf("%d", &N))
{
num=0;
for(int i=1 ;i <= N; ++i)
{
for(int j=1; j <= N; ++j)
{
scanf("%lf",&w);
map[i][j]=w;
}
}
scanf("%d", &M);
while(M--)
{
scanf("%d%d", &s, &e);
SPFA();
} }
return 0;
}
Dijkstra
#include<stdio.h>
#include<string.h>
double map[1010][1010];
double dis[1010];
bool used[1010];
int n;
int i,j;
void dijkstra(int u)
{
memset(used,0,sizeof(used));
for(i=1;i<=n;++i)
dis[i]=0; int pos=u;
for(i=1;i<=n;++i)//第一次给dis赋值
{
dis[i]=map[u][i];
}
dis[u]=1;
used[u]=1;
for(i=1;i<n;++i)//再找n-1个点
{
double max=0;
for(j=1;j<=n;++j)
{
if(!used[j]&&max<dis[j])
{
max=dis[j];
pos=j;
}
}
used[pos]=1;
dis[pos]=max;
for(j=1;j<=n;++j)//把dis数组更新,也叫松弛
{
if(!used[j]&&dis[j]<map[pos][j]*dis[pos])
{
dis[j]=map[pos][j]*dis[pos];
}
}
}
}
int main()
{
int m;
double w;
int u,v;
while(~scanf("%d",&n))
{
for(i=1;i<=n;++i)
for(j=1;j<=n;++j)
{
scanf("%lf",&w);
map[i][j]=w;
} scanf("%d",&m);
while(m--)
{
scanf("%d%d",&u,&v);
dijkstra(u);
if(dis[v]==0) printf("What a pity!\n");
else
printf("%.3lf\n",dis[v]);
}
}
return 0;
} /*
3
1 0.5 0.5
0.5 1 0.2
0.5 0.2 1
3
1 2
2 3
1 3
*/
find the safest road HDU杭电1596【Dijkstra || SPFA】的更多相关文章
- 『ACM C++』HDU杭电OJ | 1415 - Jugs (灌水定理引申)
今天总算开学了,当了班长就是麻烦,明明自己没买书却要带着一波人去领书,那能怎么办呢,只能说我善人心肠哈哈哈,不过我脑子里突然浮起一个念头,大二还要不要继续当这个班委呢,既然已经体验过就可以适当放下了吧 ...
- 杭电 1596 find the safest road (最短路)
http://acm.hdu.edu.cn/showproblem.php?pid=1596 这道题目与杭电2544最短路的思想是一样的.仅仅只是是把+改成了*,输入输出有些不一样而已. find t ...
- 杭电1596 find the safest road
find the safest road Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...
- 一个人的旅行 HDU杭电2066【dijkstra算法 || SPFA】
pid=2066">http://acm.hdu.edu.cn/showproblem.php? pid=2066 Problem Description 尽管草儿是个路痴(就是在杭电 ...
- 『ACM C++』HDU杭电OJ | 1418 - 抱歉 (拓扑学:多面体欧拉定理引申)
呕,大一下学期的第一周结束啦,一周过的挺快也挺多出乎意料的事情的~ 随之而来各种各样的任务也来了,嘛毕竟是大学嘛,有点上进心的人多多少少都会接到不少任务的,忙也正常啦~端正心态 开心面对就好啦~ 今天 ...
- 杭电 1596 find the safest road (最小路径变形求最大安全度)
Description XX星球有很多城市,每个城市之间有一条或多条飞行通道,但是并不是所有的路都是很安全的,每一条路有一个安全系数s,s是在 0 和 1 间的实数(包括0,1),一条从u 到 v 的 ...
- HDU Today HDU杭电2112【Dijkstra || SPFA】
http://acm.hdu.edu.cn/showproblem.php?pid=2112 Problem Description 经过锦囊相助,海东集团最终度过了危机,从此.HDU的发展就一直顺风 ...
- Choose the best route HDU杭电2680【dijkstra算法 || SPFA】
http://acm.hdu.edu.cn/showproblem.php?pid=2680 Problem Description One day , Kiki wants to visit one ...
- 畅通project续HDU杭电1874【dijkstra算法 || SPFA】
http://acm.hdu.edu.cn/showproblem.php?pid=1874 Problem Description 某省自从实行了非常多年的畅通project计划后.最终修建了非常多 ...
随机推荐
- python课堂知识的几点总结
1.执行python脚本的两种方式:利用python进入解释器和找到可执行文件1.py 2.位和字节:一个字节是8位,计算机运行时是以字节为单位,存储的时候是以位为单位 3.编码发展:ASCII只有0 ...
- ucore_lab1
练习1:理解通过make生成执行文件的过程.(要求在报告中写出对下述问题的回答) 实验过程 静态分析代码. 实验的目录结构如下: . ├── boot ├── kern │ ├── debug │ ...
- django开发微信公众平台遇到的问题记录
在pythonanywhere.com上使用django开发微信公众平台应用,结果用户发送的信息,微信服务器一次也没有成功转发到pythonanywhere上来,但是用接口测试工具调试却发现是正常的, ...
- 集合接口list与集合接口set的区别
在Java中 除了 Map以外的集合的根接口都是Collection接口,而在Collection接口的子接口中,最重要的莫过于List和Set集合接口. 今天我们就来谈谈List集合接口与Set集合 ...
- Spring MVC学习总结(7)——Spring MVC整合Ehcache缓存框架
Ehcache算是当前比较流行的缓存框架,使用缓存可以极大的缓解服务器和数据库的压力,提高访问效率,提高服务器的并发能力.接下来我们看怎么把缓存使用起来. SpringMVC集成Ehcache所需的j ...
- 数字签名技术与https
1,非对称加密技术 非对称加密算法需要两个密钥,公开密钥(publickey)和私有密钥(privatekey):公钥和私钥是成对出现的. 非对称加密例子:B想把一段信息传给A,步骤:1)A把公钥传给 ...
- Mybatis解决了JDBC编程哪些问题
一:Mybatis简介 MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动.创建connection.创 ...
- Core abstraction layer for telecommunication network applications
A new sub-system, the core abstraction layer (CAL), is introduced to the middleware layer of the mul ...
- maven小知识点
Maven 使用惯例优于配置的原则 .它要求在没有定制之前,所有的项目都有如下的结构: 一个 maven 项目在默认情况下会产生 JAR 文件,另外 ,编译后 的 classes 会放在 basedi ...
- iipccsxxtnsoiq
gxspvyheuetwqgnbwmwd