L2-001:dijskstra + 多条最短路径 + 记录中间路径
题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805073643683840
第一行输出最短路径的条数和能够召集的最多的救援队数量。第二行输出从S到D的路径中经过的城市编号。数字间以空格分隔,输出结尾不能有多余空格。
思路:
题意:找最短路径,如果有多条最短路径值相等,找经过的点最多的一条。
dijkstra算出最短路径,在搜寻最短路时更改一下几点:
1.记录中间路径节点
2.更新最短路时,更新点权和,记录当前节点的最短路数量。
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
#define inf 0x3f3f3f3f
using namespace std;
const int N=555;
int dis[N];//记录最短距离
int path[N];//记录最短路径中间节点
int w[N];
int pathnum[N];//记录最短路径的数目
int tol[N];//记录总路径的边权之和
int book[N];
int mp[N][N];//邻接矩阵
int n,m,s,d;
void print(int x)//递归输出路径
{
if(path[x]==-1)
{
printf("%d",x);
return ;
}
print(path[x]);
printf(" %d",x);
return ;
}
void dijkstra()
{
memset(book,0,sizeof(book));
memset(tol,0,sizeof(tol));
int i,j;
for(i=0;i<n;i++)
dis[i]=inf;
dis[s]=0;
path[s]=-1;
tol[s]=w[s];//对起始点的初始化
pathnum[s]=1;//起点的最短路径数为1
for(i=0;i<n;i++)
{
int u,minn=inf;
//找到dis路径权值最小的点u
for(j=0;j<n;j++)
{
if(!book[j]&&dis[j]<minn)
{
u=j;
minn=dis[j];
}
}
book[u]=1;
for(j=0;j<n;j++)
{
//更新最短路径 以u去更新它的邻接点
if(dis[j] > dis[u] + mp[u][j])//松弛时各数组的更新
{
dis[j] = dis[u] + mp[u][j];//更新最短路径值 ok
path[j] = u;//记录中间路径 ok
tol[j] = tol[u] + w[j]; //更新最短路径对应下的顶点最大值
pathnum[j] = pathnum[u];//如果dis最短路径的值更新为最大值了 说明是第一次更新,并且是用u去更新的v,所以点j的最短路径数量应该等于u的最短路径数量
}
else if(dis[j] == dis[u] + mp[u][j])//相等时的更新
{
pathnum[j] += pathnum[u];//如果最短路径相等了,说明有这两个点的多种方案都可行,应该是二者最短路径的和
//在距离相同时 比较所有的点权和 更新为最大的点权
if(tol[j] < tol[u] + w[j])//点权值的更新
{
tol[j] = tol[u] + w[j];//更新点权值和
path[j] = u;//改变中间路径
}
}
}
}
}
int main()
{
int x,y,z;
scanf("%d%d%d%d",&n,&m,&s,&d);
for(int i=0;i<n;i++)
scanf("%d",&w[i]);
memset(mp,inf,sizeof(mp));
for(int i=0;i<m;i++)
{
scanf("%d%d%d",&x,&y,&z);
mp[x][y]=z;
mp[y][x]=mp[x][y];
}
dijkstra();
printf("%d %d\n",pathnum[d],tol[d]);
print(d);
return 0;
}
L2-001:dijskstra + 多条最短路径 + 记录中间路径的更多相关文章
- Dijkstra 最短路算法(只能计算出一条最短路径,所有路径用dfs)
上周我们介绍了神奇的只有五行的 Floyd 最短路算法,它可以方便的求得任意两点的最短路径,这称为"多源最短路".本周来来介绍指定一个点(源点)到其余各个顶点的最短路径,也叫做&q ...
- [转]SqlSever2005 一千万条以上记录分页数据库优化经验总结【索引优化 + 代码优化】一周搞定
对普通开发人员来说经常能接触到上千万条数据优化的机会也不是很多,这里还是要感 谢公司提供了这样的一个环境,而且公司让我来做优化工作.当数据库中的记录不超过10万条时,很难分辨出开发人员的水平有多高,当 ...
- MS SqlSever一千万条以上记录分页数据库优化经验总结【索引优化 + 代码优化】[转]
对普通开发人员来说经常能接触到上千万条数据优化的机会也不是很多,这里还是要感谢公司提供了这样的一个环境,而且公司让我来做优化工作.当数据库中的记录不超过10万条时,很难分辨出开发人员的水平有多高,当数 ...
- 增加一条新记录,同时返回其自增id
方法一.是在Insert或Update触发器中用select来返回需要的字段值.默认情况下,当insert时,触发其insert触发器,它的默认返回值是影响到的行数,语句是:select @@rowc ...
- K条最短路径算法(KSP, k-shortest pathes):Yen's Algorithm
参考: K最短路径算法之Yen's Algorithm Yen's algorithm 基于网络流量的SDN最短路径转发应用 K条最短路径算法:Yen's Algorithm 算法背景 K 最短路径问 ...
- MYSQL:随机抽取一条数据库记录
今天我们要实现从随机抽取一条数据库记录的功能,并且抽取出来的数据记录不能重复: 1.首先我们看文章表中的数据: 2.实现功能代码如下: 1 /** * 获取随机的N篇文篇 * @param int $ ...
- SqlSever2005 一千万条以上记录分页数据库优化经验总结【索引优化 + 代码优化】
对普通开发人员来说经常能接触到上千万条数据优化的机会也不是很多,这里还是要感谢公司提供了这样的一个环境,而且公司让我来做优化工作.当数据库中的记录不超过10万条时,很难分辨出开发人员的水平有多高,当数 ...
- 什么是域名的TTL值? ——一条域名解析记录在DNS缓存服务器中的存留时间
什么是域名的TTL值? 转自:http://hizip.net/index.php/archives/20/TTL(Time-To-Live),就是一条域名解析记录在DNS服务器中的存留时间.当各地的 ...
- oracle中plsql练习题----查询姓为“SMITH”的员工信息,并输出其员工号、姓名、工资、部门号。 – –如果该员工不存在,则插入一条新记录,员工号为2012,员工姓名为“Smith”,工资为7500元,入职日期为“2002年3月5日”,部门号为50。 – –如果存在多个名“Smith”的员工,则输出所有名为“Smith”的员工号、姓名、工资、入职日期、部门号L。
一.思路:首先判断这个查询的是emp表,需要接收值,声明一个rowtype类型接收数据即可,第二是,存在exception,需要处理,exception中有两种异常,分别处理即可,分别输出即可. 二. ...
随机推荐
- meta twitter 属性
总结下国际范儿的meta标签 <meta name="A game made to inspire developers to use GSAP, ES6 and Flexbox&qu ...
- keras tensorboard的使用
http://blog.csdn.net/xiaojiajia007/article/details/72865764 https://stackoverflow.com/questions/4211 ...
- CNN那么多的网络有什么区别吗?如何对CNN网络进行修改?
https://www.zhihu.com/question/53727257/answer/136261195 http://blog.csdn.net/csmqq/article/details/ ...
- 数据模型Model(I)
枚举.结构体和协议组成Model //定义一个协议 protocol BaseItemProtocal { var title: String { get set } //属性是可读可写的 var t ...
- 微信小程序制作家庭记账本之六
第六天,自己根据样本代码做的记账本可实现添加账目,删除账目和消费总和,实机可以测试,但是没有域名,别人无法访问.
- sass中的循环判断条件语句
@if $lte7:true !default;//是否兼容ie6,7 //inline-block //ie6-7 *display: inline;*zoom:1; @mixin inline-b ...
- hashcat使用命令简介
1.指定HASH类型 在HashCat中--hash-type ?参数可以指定要破解的HASH类型,运行hashcat主程序加上--help参数,在* Generic hash types:中可以看到 ...
- The Little Prince-12/12
The Little Prince-12/12 双十二,大家有没有买买买呢?宝宝双十一之后就吃土了,到现在,叶子都长出来了!!! 当你真的喜欢一个人的时候 就会想很多 会很容易办蠢事 说傻话 小王子要 ...
- 全球最大的3D数据集公开了!标记好的10800张全景图
Middlebury数据集 http://vision.middlebury.edu/stereo/data/ KITTI数据集简介与使用 https://blog.csdn.net/solomon1 ...
- android studio下载地址
AndroidStudio3.0 下载地址——高速下载 https://www.androiddevtools.cn/ 2017年08月20日 22:41:09 qq风轻云淡 阅读数:5559 ...