1111 Online Map
时间:2020-03-10
本文章向大家介绍1111 Online Map,主要包括1111 Online Map使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
#include <iostream> #include <vector> #include <algorithm> #include <queue> #include <cstring> # define LL long long using namespace std; int N; int M; int len[500][500]; int ti[500][500]; int S,T; int dispre[500]; int mindis[500]; int needtime[500]; int fastest[500]; int needsection[500]; int fastpre[500]; struct comp{ bool operator()(vector<int> p1, vector<int> p2){ return p1[1]>p2[1]; } }; void shortestPath(){ priority_queue<vector<int>, vector<vector<int>>, comp> pq; // {site,dis,time} memset(mindis,127,sizeof(mindis)); mindis[S]=0; needtime[S]=0; pq.push({S,0,0}); while(!pq.empty()){ auto cur=pq.top(); pq.pop(); int u=cur[0]; int d=cur[1]; int t=cur[2]; for(int i=0;i<N;i++){ if(len[u][i]==-1) continue; if(d+len[u][i]<mindis[i]){ mindis[i]=d+len[u][i]; dispre[i]=u; needtime[i]=t+ti[u][i]; pq.push({i,mindis[i],needtime[i]}); }else if(d+len[u][i]==mindis[i]){ if(t+ti[u][i]<needtime[i]){ dispre[i]=u; needtime[i]=t+ti[u][i]; pq.push({i,mindis[i],needtime[i]}); } } } } } void fastestPath(){ priority_queue<vector<int>, vector<vector<int>>, comp> pq; // {site,time,sections} memset(fastest,127,sizeof(fastest)); fastest[S]=0; needsection[S]=0; pq.push({S,0,0}); while(!pq.empty()){ auto cur=pq.top(); pq.pop(); int u=cur[0]; int t=cur[1]; int s=cur[2]; for(int i=0;i<N;i++){ if(len[u][i]==-1) continue; if(t+ti[u][i]<fastest[i]){ fastest[i]=t+ti[u][i]; fastpre[i]=u; needsection[i]=s+1; pq.push({i,fastest[i],needsection[i]}); }else if(t+ti[u][i]==fastest[i]){ if(s+1<needsection[i]){ fastpre[i]=u; needsection[i]=1+s; pq.push({i,fastest[i],needsection[i]}); } } } } } int main(){ scanf("%d %d", &N, &M); memset(len,-1,sizeof(len)); memset(ti,-1,sizeof(ti)); memset(dispre,-1,sizeof(dispre)); for(int i=0;i<M;i++){ int a,b,c,d,e; scanf("%d%d%d%d%d", &a, &b, &c ,&d, &e); len[a][b]=d; ti[a][b]=e; if(c==0){ len[b][a]=d; ti[b][a]=e; } } scanf("%d%d", &S, &T); shortestPath(); vector<int> path; int v=T; path.push_back(v); while(true){ v=dispre[v]; path.push_back(v); if(v==S) break; } fastestPath(); vector<int> fapath; v=T; fapath.push_back(v); while(true){ v=fastpre[v]; fapath.push_back(v); if(v==S) break; } int issame=1; if(path.size()!=fapath.size()){ issame=0; }else{ for(int i=0;i<path.size();i++){ if(path[i]!=fapath[i]){ issame=0; break; } } } if(issame==1){ //Distance = 3; Time = 4: 3 -> 2 -> 5 printf("Distance = %d; Time = %d: ", mindis[T], fastest[T]); for(int i=path.size()-1;i>=0;--i){ if(i!=path.size()-1){ printf(" -> "); } printf("%d", path[i]); } return 0; } //Distance = 6: 3 -> 4 -> 8 -> 5 printf("Distance = %d: ", mindis[T]); for(int i=path.size()-1;i>=0;--i){ if(i!=path.size()-1){ printf(" -> "); } printf("%d", path[i]); } printf("\n"); printf("Time = %d: ", fastest[T]); for(int i=fapath.size()-1;i>=0;--i){ if(i!=fapath.size()-1){ printf(" -> "); } printf("%d", fapath[i]); } return 0; }
原文地址:https://www.cnblogs.com/FEIIEF/p/12457681.html
- 前端自动化测试漫长路之——Selenium初探
- 计算机程序的思维逻辑 (14) - 类的组合
- webpack中tree-shaking技术介绍
- Python进行远程视频监控
- 好用的前端页面性能检测工具—sitespeed.io
- 计算机程序的思维逻辑 (13) - 类
- 新浪微博爬虫最新分享
- Unity Application Block 3月12 发布的版本
- HTTPS静态服务搭建过程详解
- 基于Webkit的浏览器关键渲染路径介绍
- CodePlex 全面支持Subversion/TortoiseSVN
- 计算机程序的思维逻辑 (11) - 初识函数
- Android WebView 调试方法
- Python开发微信公众号后台(系列一)
- 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 数组属性和方法
- UOS修改盘符名称(像windows的C、D、E盘)
- 【原创】Java并发编程系列29 | ConcurrentLinkedQueue
- UOS系统安装-配置Qt环境
- C++控制台程序接收、解析参数及被如何调用、调试
- C++11标准常用特性---统一初始化
- QPainter的fillRect函数-QGradient-Preset渐变颜色预设值
- 深度学习|Tensorflow2.0进阶
- Mumble——简介及搭建
- 网站开启HSTS增强安全性
- 形式化分析工具(六):HLPSL Tutorial(Example 4,other)
- Typecho回复可见功能
- 微信小程序开发实战(13):图像组件(image)
- Typecho文章代码高亮功能
- “数据分析师”面试最怕被问到的SQL优化问题(下)
- 普通小程序的订阅消息不再限制时间