1003 Emergency(考察迪杰斯特拉算法+第二标尺)
时间:2020-03-07
本文章向大家介绍1003 Emergency(考察迪杰斯特拉算法+第二标尺),主要包括1003 Emergency(考察迪杰斯特拉算法+第二标尺)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
大致题意就是给出一个图、每个顶点的点权、顶点之间的边权、起点和终点。求出从起点到终点的最短路径的数量、以及最短路径上的最大点权之和。
这是一道模板题,要先记住大体流程,然后反复练习,较难头疼。。。
1 #include<iostream> 2 using namespace std; 3 4 const int maxn = 510; 5 const int inf = 0x3fffffff;//无穷大 6 //第一标尺 7 int n,m,st,ed,G[maxn][maxn];//顶点个数、邻接矩阵 8 bool visited[maxn] = {false};//标记是否被访问过数组 9 int d[maxn]; //从起点S到其它顶点的最短距离 10 11 //第二标尺 12 int num[maxn];//从起点S到其它顶点的最短路径数量之和 13 int weight[maxn],w[maxn];//各个顶点的点权、从起点S到其它顶点的最大点权之和 14 15 void dijkstra(int s) {//s为起点 16 //第一步,初始化标尺一、标尺二 17 fill(d,d+n,inf); 18 fill(num,num+n,0); 19 fill(w,w+n,0); 20 d[s] = 0; 21 num[s] = 1; 22 w[s] = weight[s]; 23 //第二步,循环 n次 24 for(int i = 0; i < n; ++i) { 25 // 第三步,遍历所有顶点u,找未被访问过的使d[u]最小的顶点u 26 int u = -1, MIN = inf; 27 for(int j = 0; j < n; ++j) { 28 if(visited[j] == false && MIN > d[j]) { 29 u = j; 30 MIN = d[j]; 31 } 32 } 33 if(u == -1) return ;//剩下的顶点和起点不连通 34 //第四步,标记 u为已访问 35 visited[u] = true; 36 //第五步,遍历所有顶点v,如果v未被访问过且u能到达v 37 for(int v = 0; v < n; ++v) { 38 if(visited[v] == false && G[u][v] != inf) { 39 if(d[u] + G[u][v] < d[v]) {//经过u可以优化d[v] 40 d[v] = d[u]+G[u][v]; //覆盖d[v] 41 num[v] = num[u]; //覆盖num[v] 42 w[v] = w[u] + weight[v];//覆盖w[v] 43 } else if(d[u] + G[u][v] == d[v]) { //找到一条相同长度的路径 44 if(w[u] + weight[v] > w[v])//覆盖w[v] 45 w[v] = w[u] + weight[v]; 46 num[v] += num[u]; 47 } 48 } 49 } 50 } 51 } 52 int main() { 53 cin>>n>>m>>st>>ed; 54 for(int i = 0; i < n; ++i) cin>>weight[i]; //初始化各顶点的点权 55 //初始化邻接矩阵 56 fill(G[0],G[0]+maxn*maxn,inf);//别忘了 57 int c1,c2,L; 58 for(int i = 0 ; i < m ; ++i) { 59 cin>>c1>>c2>>L; 60 G[c1][c2] = L; 61 G[c2][c1] = L; 62 } 63 dijkstra(st);//算法入口 64 printf("%d %d",num[ed],w[ed]); 65 return 0; 66 }
原文地址:https://www.cnblogs.com/keep23456/p/12436774.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 「Workshop」第十九期:Markdown与RMarkdown最佳入口
- S1到S9,545名职业选手,有多少人折戟全球总决赛?
- 「R」数据可视化21: Edge Bunding图
- 一个服务器能干什么?
- 按照说明做了 ,还是没有点亮网关,一直离线模式
- iOS音视频接入-快速集成TRTC SDK
- 基于Flink快速开发实时TopN程序最简单的思路
- MySQL+Flask,在本地实现一个API接口。
- Java新特性:数据类型可以扔掉了?
- 使用Flask在服务器实现一个API接口。
- 深入理解谷歌最强V8垃圾回收机制
- 用Python下载抖音无水印视频!
- 多年管理系统开发经验总结~代码解决方案
- 分析B站100万+视频,发现竟然有这么多干货资源。
- Pandas,数据处理的好帮手!