博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
1111 Online Map
阅读量:5738 次
发布时间:2019-06-18

本文共 2024 字,大约阅读时间需要 6 分钟。

题意:给定一个图,以及起点和终点,需要我们计算两条路径。第1条路径:距离最短路径,若不唯一,则选择用时最短的那一条;第2条路径:用时最少路径,若不唯一,选择经过结点数最少的那一条。

思路:两次Dijkstra即可。以往都是求一条路径,本题要求两条,没什么不同,只是代码量多了一些。编写代码前要心中有数,变量名怎么命名等等(变量名一多,命名真是件举棋不定的事。。)

第1条路径:第1标尺为距离,第2标尺为用时,在Dijkstra中完成更新。用pre[v]记录结点v的前驱,在Dijkstra之后用DFS把路径提取出来即可。

第2条路径:第1标尺为用时,第2标尺为整条路径所经过的结点数,也可以在Dijkstra中完成更新。其他操作都是一模一样的。

#include 
#include
#include
using namespace std;const int Inf=0x7fffffff;const int N=505;struct Node{ int v; int length,time; Node(int v_,int len_,int t_):v(v_),length(len_),time(t_){}};int n,m,s,e;//结点个数,边数,起点,终点vector
Adj[N];bool vis[N];vector
pre[N];//dis[v]记录起点s到结点v的最短距离(第1标尺),cost[v]记录起点s到结点v的最快时间(第2标尺)int dis[N];int cost[N];//time[v]记录起点s到结点v的最快时间(第1标尺),num[v]记录起点s到结点v的最少结点数(第2标尺)int time[N];int num[N];void Dijkstra_length(int s){ fill(vis,vis+N,false); fill(dis,dis+N,Inf); dis[s]=0; fill(cost,cost+N,Inf); cost[s]=0; for(int i=0;i
& path){ path.push_back(v); for(auto u:pre[v]) dfs(u,path);}int main(){ //freopen("pat.txt","r",stdin); int v1,v2,one_way,len,t; scanf("%d%d",&n,&m); for(int i=0;i
path_len,path_time;//分别记录两条路径 Dijkstra_length(s); dfs(e,path_len); Dijkstra_time(s); dfs(e,path_time); if(path_len==path_time){ printf("Distance = %d; Time = %d:",dis[e],time[e]); for(int i=path_time.size()-1;i>=0;i--){ printf(" %d",path_time[i]); if(i>0) printf(" ->"); else printf("\n"); } }else{ printf("Distance = %d:",dis[e]); for(int i=path_len.size()-1;i>=0;i--){ printf(" %d",path_len[i]); if(i>0) printf(" ->"); else printf("\n"); } printf("Time = %d:",time[e]); for(int i=path_time.size()-1;i>=0;i--){ printf(" %d",path_time[i]); if(i>0) printf(" ->"); else printf("\n"); } } return 0;}

 

转载于:https://www.cnblogs.com/kkmjy/p/9588071.html

你可能感兴趣的文章
Java not support java EE1.3
查看>>
iptables规则备份及恢复、firewalld九个zone,service的操作
查看>>
www.conf配置文件的参数详解
查看>>
如何实现邀请好友帮抢票功能?
查看>>
深圳联通特邀湖北籍企业参观公司总部大楼举行
查看>>
告警系统主脚本、告警系统配置文件、告警系统监控项目
查看>>
Python 和 PyCharm 在 windows10 环境的安装和设置
查看>>
C语言入门基础之数组——数学和编程的完美结合(图)
查看>>
《远见》的读后感作文1000字范文
查看>>
重置密码、单用户模式、救援模式
查看>>
LAMP环境搭建1-mysql5.5
查看>>
第三课 Linux目录及文件管理、用户组管理及bash重定向
查看>>
shell 脚本攻略--小试牛刀
查看>>
spring boot view override
查看>>
bzoj 2282: [Sdoi2011]消防
查看>>
我的友情链接
查看>>
centos5.9使用RPM包搭建lamp平台
查看>>
关于C#面向对象2
查看>>
Javascript String类的属性及方法
查看>>
vim编辑器如何添加或删除多行注释
查看>>