题目描述

有n个城市m条道路(n<1000, m<10000),每条道路有个长度,请找到从起点s到终点t的最短距离和经过的城市名。

输入

输入包含多组测试数据。

每组第一行输入四个数,分别为n,m,s,t。

接下来m行,每行三个数,分别为两个城市名和距离。

输出

每组输出占两行。

第一行输出起点到终点的最短距离。

第二行输出最短路径上经过的城市名,如果有多条最短路径,输出字典序最小的那条。若不存在从起点到终点的路径,则输出“can't arrive”。

样例输入

3 3 1 3
1 3 3
1 2 1
2 3 1

样例输出

2
1 2 3
#include <iostream>
#include <vector>
using namespace std;const int maxn = 1000;
const int inf = 1000000000;int n, m, s, t; //n个城市,m条道路,起点s,重点t
struct node
{int v;int dis;node(int _x, int _y){v = _x;dis = _y;}
};
vector<node> adj[maxn];
vector<int> pre[maxn];
vector<int> temp, ans;
bool vis[maxn] = {false};
int d[maxn];void dij(int s)
{fill(d, d+maxn, inf);d[s] = 0;for(int i = 0; i < n; i++){int u = -1, min = inf;for(int j = 0; j < n; j++){if(vis[j] == false && d[j] < min){u = j;min = d[j];}}if(u == -1) return;vis[u] = true;for(int j = 0; j < adj[u].size(); j++){int v = adj[u][j].v;if(vis[v] == false){if(d[u] + adj[u][j].dis < d[v]){d[v] = d[u] + adj[u][j].dis;pre[v].clear();pre[v].push_back(u);}else if(d[u] + adj[u][j].dis == d[v]){pre[v].push_back(u);}}}}
}void dfs(int v)
{if(v == s){temp.push_back(v);for(int i = temp.size() - 1; i >= 0; i--){if(ans.size() == 0){ans = temp;}else{if(temp[i] == ans[i]) continue;else if(temp[i] < ans[i]){ans = temp;break;}else if(temp[i] > ans[i]) break;}}temp.pop_back();return;}temp.push_back(v);for(int i = 0; i < pre[v].size(); i++){dfs(pre[v][i]);}temp.pop_back();
}int main()
{scanf("%d%d%d%d", &n, &m, &s, &t);for(int i = 0; i < m; i++){int a, b, d;scanf("%d%d%d", &a, &b, &d);adj[a].push_back(node(b,d));adj[b].push_back(node(a,d));}dij(s);if(d[t] == inf) printf("can't arrive");else{printf("%d\n", d[t]);dfs(t);for(int i = ans.size() - 1; i >= 0; i--){printf("%d ", ans[i]);}}return 0;
}

每次做一遍出来,都是答案错误50%....

排查半天,还是错误50%....

未完待解.....(算法虐我千百遍,我待算法如初恋)

Codeup墓地-问题 D: 最短路径相关推荐

  1. Codeup墓地-1956

    Codeup墓地-1956 src:http://codeup.cn/problem.php?id=1956 1956: 最短路径 时间限制: 1 Sec 内存限制: 32 MB 题目描述 N个城市, ...

  2. Codeup墓地-1123

    Codeup墓地-1123 src:http://codeup.cn/problem.php?id=1123 1123: 确定排序序列 时间限制: 1 Sec 内存限制: 32 MB 题目描述 一个由 ...

  3. Codeup墓地-1107

    Codeup墓地-1107 src:http://codeup.cn/problem.php?id=1107 1107: 欧几里得游戏 时间限制: 1 Sec 内存限制: 32 MB 题目描述 小明和 ...

  4. Codeup墓地1817号A+B

    Codeup墓地链接:http://codeup.cn/ 本题链接:http://codeup.cn/problem.php?cid=100000575&pid=1 问题描述: 问题 B: A ...

  5. Codeup墓地-2337

    Codeup墓地-2337 src:http://codeup.cn/problem.php?id=2337 2337: 阻击火箭队 时间限制: 1 Sec 内存限制: 32 MB 题目描述 小明很喜 ...

  6. Codeup墓地-1985

    Codeup墓地-1985 src:http://codeup.cn/problem.php?id=1985 1985: 任务调度 时间限制: 1 Sec 内存限制: 32 MB 题目描述 读入任务调 ...

  7. Codeup墓地-2118

    Codeup墓地-2118 src:http://codeup.cn/problem.php?id=2118 2118: 非常可乐 时间限制: 1 Sec 内存限制: 32 MB 题目描述 大家一定觉 ...

  8. Codeup墓地-1098

    Codeup墓地-1098 src:http://codeup.cn/problem.php?id=1098 1098: 最少的交换 时间限制: 1 Sec 内存限制: 32 MB 题目描述 现在给你 ...

  9. Codeup墓地-2117

    Codeup墓地-2117 src:http://codeup.cn/problem.php?id=2117 2117: 确定比赛名次 时间限制: 1 Sec 内存限制: 32 MB 题目描述 有N个 ...

最新文章

  1. Objective-C 注释规范心得
  2. emctl start dbconsole OC4J_dbconsole*** not found
  3. java密码框提示_[Java教程]如何实现在密码框如出现提示语
  4. 【缅怀妈妈系列诗歌】之八:妈妈,我不会忘记
  5. 京东回应“两年将回购20亿美元股份”;微软即刻关闭全球所有旗下商店;. Net 5首个预览版发布|极客头条...
  6. linux apache 依赖包,利用 yum 解决 Linux 软件包的依赖关系
  7. android 5.1 内核版本号,最新的安卓5.1.1 ROOT教程(不需要刷第三方内核)
  8. python程序中1—10的乘积_[求助]1个数1到10的乘积
  9. 移动通信USSD业务探讨(转)
  10. [论文笔记]AlignedReID
  11. Flask06_ORM多表
  12. JAVA数据类型与转换
  13. 奥升德赢得三星SDI锂离子电池添加剂专利案;蜂巢能源完成102.8亿元人民币B轮融资;伊顿、特灵科技、芬美意发布财报 | 能动...
  14. 我是一名项目经理,把一个项目带崩了--案例分析
  15. 男人30学php,科学网—男人30岁之前要学的16件事 - 刘石泉的博文
  16. CAD/CASS批量桩号里程标注插件(6种模式)
  17. 【超详总结/理解:正则表达式】特点/元字符/正则表达式中的标志位-flag/RegExp/重复操作与后向引用/匹配模式/表达邮箱/正则表达式对象的方法/利用正则表达式限制网页表单里的文本框输入内容
  18. 关于HTML中的滚动条/去掉滚动条
  19. python unsigned long_无法将“vectorunsigned long”转换为Python obj
  20. 受邀参加:2010中国中小企业信息化与成长力推进高峰论坛

热门文章

  1. 详解Windows内存分页机制
  2. MyBatis(一)MyBatis介绍和配置详解
  3. 每个人都有自己的人生节奏
  4. MySQL主从复制虽好,能完美解决数据库单点问题吗?
  5. 面试官问,为什么建议MySQL列属性尽量用 NOT NULL ?
  6. [四]RabbitMQ-客户端源码之Frame
  7. 队列实现栈 | 栈实现队列
  8. 2019年低延迟直播技术展望
  9. 腾讯携手2020全球C++及系统软件技术大会
  10. 数据中心智能安防新突破:腾讯觅踪亮相DCD