题目:

这道题有一个坑点:两种交通工具同时出发,中途不能停留在同一个小镇。

其实想通了就很简单,因为要么火车一步到达,要么汽车一步到达。不可能停留在同一个地方。

可是我还WA了好几次,蠢哭。想用BFS写,一直TLE,后来想到这点之后,用djikstra求单源最短路径就出来了。

如果火车一步到,就求汽车的单源最短路径;如果汽车一步到,就求火车的单源最短路径。

代码:

#include <iostream>
#include <algorithm>
#include <map>
#include <vector>
#include <set>
#include <math.h>
#include <queue>
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
typedef long long ll;
//#define INF 2147483647
#define INF 2000000000int n,m;
#define MAX_V 410
int cost[MAX_V][MAX_V];  //cost[u][v]表示e = (u,v)的权值
int d[MAX_V];        //源点s出发的最短距离
bool used[MAX_V];    //标记使用过的点 int djikstra(){fill(d,d+n+1,INF);fill(used,used+n,false);d[1] = 0;while(true){int v = -1;for(int i = 1;i <= n; i++){if(!used[i]&&(v == -1 || d[i] < d[v])) v = i;}if(v == -1) break;used[v] = true;for(int i = 1;i <= n; i++){if(cost[v][i] == 1){d[i] = min(d[i],d[v]+cost[v][i]);}}}if(d[n] == INF) return -1;else return d[n];
}int main() {cin >> n >> m;for(int i = 1;i <= n; i++){for(int j = 1;j <= n; j++){cost[i][j] = -1;if(i == j) cost[i][j] = 0; }}for(int i = 1;i <= m; i++){int u,v;cin >> u >> v;cost[u][v] = 1;cost[v][u] = 1;}if(cost[1][n] == 1){for(int i = 1;i <= n; i++){for(int j = 1;j <= n; j++){cost[i][j] = -cost[i][j];}}}cout << djikstra() << endl;return 0;
}

51nod 1649 齐头并进 (djikstra求最短路径,只用跑一次)相关推荐

  1. python迷宫问题求最短路径_用栈求解迷宫问题的所有路径及最短路径程序

    目的:能将栈运用的更为熟练 实验内容:求解迷宫问题程序,要求输出如图所示的迷宫的路径,并求出第一条最短路径的长度以及最短路径. 设计的算法功能: mgpath(int xi,int yi,int xe ...

  2. C++迪杰斯特拉算法求最短路径

    一:算法历史 迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题.迪杰斯特拉算法主要特点是以 ...

  3. P1744 采购特价商品(SPFA求最短路径模板)

    题目传送门:https://www.luogu.com.cn/problem/P1744 题意 给出从 111 ~ NNN 编号的 NNN 个点,以及它们的坐标 (xi,yi)(x_i,\ y_i)( ...

  4. “chaos”的算法--之Floyd算法详解(求最短路径)

    倘若我们要在计算机上建立一个交通咨询系统则可以采用图的结构来表示实际的交通网络.其实现最基本的功能,求出任意两点间的最短路径, 求最短路径的经典方法有很多种,最常用的便是迪杰斯特拉算法和佛洛依德(Fl ...

  5. POJ 2251 Dungeon Master(三维BFS求最短路径)

    3D dungeon 时间限制: 1 Sec  内存限制: 128 MB 提交: 2  解决: 2 [提交][状态][讨论版][命题人:201506020829][Edit] [TestData] 题 ...

  6. C++floyd warshall算法求最短路径(附完整源码)

    C++floyd warshall算法求最短路径 floyd warshall算法求最短路径的完整源码(定义,实现,main函数测试) floyd warshall算法求最短路径的完整源码(定义,实现 ...

  7. 迪杰斯特拉--- 模板(求最短路径/输出路径/所有路径都可以走的做法)

    迪杰斯特拉--- 模板(求最短路径/输出路径/所有路径都可以走的做法) 1.0版 #include <iostream> using namespace std;const int max ...

  8. dijkstra标号法表格_标号法求最短路径例题详解.ppt

    标号法求最短路径例题详解 r * 最短路径 带权图G=, 其中w:E?R. ?e?E, w(e)称作e的权. e=(vi,vj), 记w(e)=wij . 若vi,vj不 相邻, 记wij =?. 设 ...

  9. 用标号法求最短路径matlab,标号法求最短路径问题

    dijstra算法 最短路径 运筹学 教学目标: 教案 标题:标号法求最短路径问题 1.通过本节学习,使学生掌握标号法的步骤: 2.通过本节学习,学生能够应用标号法求解配送路径问题 教学重点及难点: ...

最新文章

  1. Linux之Ubuntu切换root su -
  2. Git常用命令速查表
  3. linux shell if
  4. 被吹的神乎其神的Python到底都能干什么
  5. vue 父传子_Vue.js教程Vue基本指令
  6. 嘉楠发布阿瓦隆浸入式冷却矿机A1066I
  7. HCIE-Security Day28:IPSec:实验(三)总部采用ISAKMP方式安全策略组与分支机构之间建立IPSec PN
  8. 近期关于感知器MLP的最新研究
  9. Windows Workflow Foundation is coming...
  10. Swift: 获取系统字体
  11. LGame-0 3 Android与JavaSE游戏引擎 正式发布,新增SRPG制作模块
  12. 网站打开速度测试常用的两种工具及操作方法
  13. Codeforces Round #660 (Div. 2) B. Captain Flint and a Long Voyage
  14. 在网页前端调用exe程序并传参
  15. 腾讯副总裁姚星离职创业!一手筹建AI Lab,张潼张正友都曾向他汇报
  16. 数据抓取软件是如何抓取数据的?
  17. Axure与Mockplus的区别
  18. Python函数设计与使用
  19. Bootstrap3 缩略图( thumbnail )
  20. 梳理一些近期关于编程和其他一些感想

热门文章

  1. sql导入excel数据失败_nifi入门从Excel数据导入ES开始
  2. Java黑皮书课后题第5章:5.11(找出能被5或6整除的数,但不能同时整除)编写程序,显示从100到1000之间能被5或6整除但不能同时整除的数,每行显示10个。数字之间用一个空格字符隔开
  3. C语言学习之用指针方法对10个整数按由大到小顺序排序
  4. java list加入listview_Android ListView自动生成列表条目的实例
  5. 在计算机中 鼠标器属于,在计算机中,鼠标器属于()。
  6. 计算机技术是双证,计算机技术在职研究生单证可以转双证吗
  7. Ant Design Pro+Electron+electron-builder实现React应用脱离浏览器,桌面安装运行
  8. WebDriver API 元素定位(三)
  9. Android笔记——Matrix
  10. Nginx-----相关配置-详细介绍