C++ P0002 旅行计划
来源:互联网 发布:高清网络电视频道 编辑:程序博客网 时间:2024/05/16 05:42
题目:旅行计划
第一次搞输出多个最短路径,搞了有一会儿,方法不太好,有更好的方法可以教me!
# include <iostream># include <cstdio># include <cstring>using namespace std;const int inf = 0x7fffffff/3;int n, m, v, ui, vi, ti, park, minx, sizes; int cost[110], path[10010], map[110][110], to[10010];bool vis[110];int main() {//freopen("djs.in", "r", stdin);//freopen("djs.out", "w", stdout);cin >> n >> m >> v;for(int i = 0; i <= n; i++) { // 再求最短路之前,把各各边赋值为+∞ cost[i] = inf;for(int j = 0; j <= n; j++) map[i][j] = inf;}for(int i = 1; i <= m; i++) {cin >> ui >> vi >> ti;map[ui][vi] = ti; // 路径单向储存 }cost[v] = 0;for(int i = 0; i <= n; i++) { // 最短路主体,上文讲过,就不多说了 park = 0, minx = inf;for(int j = 0; j <= n; j++) if(!vis[j] && cost[j] < minx) minx = cost[park = j];vis[park] = true;for(int j = 0; j <= n; j++)if(!vis[j] && cost[j] > cost[park] + map[park][j]) {cost[j] = cost[park] + map[park][j];path[j] = park; // 这里不同的是要保存路径 }}for(int i = 0; i < n; i++) { // 输出略长 cout << i << ":" << endl;if(cost[i] >= inf || i == v) cout << "no" << endl;else {park = i; to[sizes = 1] = park;cout << "path:";while(park != v) to[++sizes] = (park = path[park]); // 因为储存是v->j,导致输出会逆序,所以放到to数组再逆序输出 for(int j = sizes; j >= 1; j--) cout << to[j] << " ";cout << endl << "cost:" << cost[i] << endl;}}return 0;}
上面的输出路径或是储存路径,都感觉实现不太好,有什么更好的方法请下面留言!
0 0
- C++ P0002 旅行计划
- Problem C A君的旅行计划
- 西安旅行计划
- 洛谷 P1137 旅行计划
- 洛谷P1137 旅行计划
- 洛谷 P1137 旅行计划
- 洛谷 P1137 旅行计划
- 洛谷P1137 旅行计划
- P1137 旅行计划
- P1137 旅行计划
- 洛谷 P1137 旅行计划
- 洛谷P1137 旅行计划
- 洛谷P1137 旅行计划
- 洛谷1137 旅行计划
- C 旅行
- 【SDOI2015】【BZOJ4086】旅行计划travel
- 51Nod-1273-旅行计划
- 上海 -》 张家界 旅行 计划10.1
- 两数之和(三)
- perl use base 继承
- Spring Boot 配置优先级顺序
- Servlet生成html页面
- LibEvent中文帮助文档-第7章【事件循环】
- C++ P0002 旅行计划
- 关于增强for循环的用法
- PHP for的1个问题
- Spring data JPA日常开发问题
- eclipse调优
- Solution for calculate & Output without Declare (Useful for SQL Developer)
- c#的简单程序结构
- Java设计模式系列
- 关于Redis不能从连接池获取资源的错误