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计划后.最终修建了非常多 ...
随机推荐
- 浅谈密码加SALT原理
我们知道,如果直接对密码进行散列,那么黑客可以对通过获得这个密码散列值,然后通过查散列值字典(例如MD5密码破解网站),得到某用户的密码. 加Salt可以一定程度上解决这一问题.所谓加Salt方法, ...
- NYIST 489 哭泣天使
哭泣天使时间限制:1000 ms | 内存限制:65535 KB难度:5 描述Doctor Who乘着Tardis带着Amy来到了一个星球,一开Tadis大门,发现这个星球上有个壮观的石像群,全是一些 ...
- LaTeX 图片色偏解决方法
本系列文章由 @YhL_Leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/50327113 在LaTeX的编辑模式中 ...
- mysql5.7官网直译SQL语句优化--分组优化
1.14Group By Optimization 分组优化 大多数方法为了满足分组查询需要扫描整个表并且创建一个临时表,其中每组中的值都是连续的,如果可以使用聚合函数和临时表获取各个分组.在某些情况 ...
- IOS Sqlite用户界面增删改查案例
1.案例简单介绍 对SQLite操作进行了简单的封装,将对数据表操作转变成对对象的操作,并通过UI界面完毕对用户表的增.删.改.查,执行界面例如以下图所看到的 a 2.项目project文件夹 Use ...
- 晋IT分享成长沙龙集锦
第一期"晋IT"分享成长沙龙于2014年7月19日圆满结束.下面是相关内容整理和第二期预告. 各位伙伴认真的介绍自己,介绍自己的业务,分析自己眼下存在的问题,大家一起探讨,真诚出谋 ...
- Android学习路线(十三)Activity生命周期——暂停和恢复(Pausing and Resuming )一个Activity
在正常使用应用的过程中.前台的activity在一些时候会被其它的组件遮挡,导致这个activity暂停.举个样例.当一个半透明的activity被打开(比如一个dialog样式的activity), ...
- Flutter 1.5 发布,正式成为全平台 UI 框架!
一. 序 在 Google I/O 2019 上,Dart 团队宣布推出新的 Flutter 稳定版本 1.5,这是 Flutter 迄今为止最大的一次版本发布. 伴随着 Flutter 1.5 的发 ...
- Testbench的编写
Testbench的作用,在于给我们编写的可综合代码的模块送入激励.即在我们波形仿真中用编写testbench来代替拖拽波形.其中还包括了我们硬件仿真与matlab仿真的联调建立(将matlab产生的 ...
- m_Orchestrate learning system---十五、如何快速查错
m_Orchestrate learning system---十五.如何快速查错 一.总结 一句话总结: a.删除代码法 b.添加提示代码法 c.仔细看错误信息 1.评论板块和论坛板块的实时更新? ...