题目

思路

dijkstra比较好,通过BFS来不断寻找到n这条路径
需要用road列表(path) 记录前一个点以及 dist列表来记录第一个点到第i个点的距离

由于题目要求问多个最短路径,所以还得需要一个count数组来记录到这个路的最短路径到底有多少条

dijkstra就是先把数据都存放在邻接表上面
然后初始化dist列表,除了自己到自己以外,其他所有的路径初始为INF(无法到达)
然后把自己存入队列{0,1} 0代表距离,1代表去自己本身。
接着根据邻接表依次拿出1结点邻接的点,判断是否来过这个点?如果已经来过这个点了就不要在重复来了,没来过就进行判断。


判断是否经过这个mid点到end是否比之前到end点更快

代码

#include<bits/stdc++.h>using namespace std;
#define ll long long
#define INF 0x3f3f3fstruct edge
{int end,cost;
};
vector<edge> e[200];
int mark[200];
int road[200];
ll cou[200];
ll dist[200];void print(int n)
{if(n == 0) return;print(road[n]);cout << n << " ";
}
int main()
{int n,m;cin >> n >> m;for(int i = 0; i < m; i++){int start, end, cost;cin >> start >> end >> cost;e[start].push_back({end,cost});e[end].push_back({start,cost});//创造邻接表}priority_queue<pair<int, int>, vector<pair<int, int>>,greater<pair<int, int>>> que;// queue<pair<int,int>> que;for(int i = 2; i <= n; i++) dist[i] = INF;//初始化点1到其他点的距离dist[1] = 0;//到自己肯定是0que.push({0,1});//1是距离,2是到哪个点cou[1] = 1;//到自己肯定有一种方法while(!que.empty()){int mid = que.top().second;//起始到midque.pop();if(mark[mid]) continue;//来过了就别来了mark[mid] = true;//记录来过for(auto data : e[mid]){//bfs来遍历int end = data.end;//要去的终点int cost = data.cost;//costif(!mark[end])//还没遍历到这个点{if(dist[end] > dist[mid] + cost){//用if只拿最小部分dist[end] = dist[mid] + cost;cou[end] = cou[mid];//更新路径数量road[end] = mid;//更新路径的一种可能que.push({dist[end], end});//BFS塞进去}else if(dist[end] == dist[mid] + cost){cou[end] += cou[mid];//加路径}}}}if(cou[n] == 0){cout << -1 << endl;cout << 0 << endl;cout << -1 << endl;}else{cout << dist[n] << endl;cout << cou[n] << endl;print(n);}
}

数据结构算法——1088. 最短路径相关推荐

  1. 数据结构与算法--图论最短路径算法应用-词阶求解

    最短路径案例 词梯应用,在一个词梯中,每个单词均由前一个单词改变一个字母而得到.例如,我们通过一系列单字母替换而得到zero转换为five,如下:five:zero,hero,here,hire,fi ...

  2. 数据结构实验7《基于Dijsktra算法的最短路径求解》

    (visual studio 2019可运行) 输入及输出要求见<数据结构C语言(第二版)>严蔚敏版 [本文仅用于啥都看不懂还想交作业选手] 加了一点输入异常的反馈 基于基于Dijsktr ...

  3. 数据结构课程设计——项目2:校园导游咨询(图 Dijkstra算法寻找最短路径)

    数据结构课程设计--项目2:校园导游咨询(图 Dijkstra算法寻找最短路径) 一.问题描述和项目要求 1.1 问题描述 1.2 基本要求 二.问题分析 2.1 程序功能设计分析 2.2 程序实现分 ...

  4. 数据结构——基于 Dijsktra 算法的最短路径求解

    实验七 基于 Dijsktra 算法的最短路径求解 [实验目的] 掌握图的邻接矩阵表示法,掌握采用邻接矩阵表示法创建图的算法. 掌握求解最短路径的 Dijsktra 算法. [实验内容] 问题描述 一 ...

  5. 数据结构之图:加权有向图与dijkstra算法找到最短路径,Python——28

    加权有向图与dijkstra算法找到最短路径 加权有向图的构造 最短路径问题与最短路径树 最短路径问题(The shortest path problem)定义 最短路径可以是时间花费最短,也可以是距 ...

  6. 数据结构算法集---C++语言实现

    /// // // // 堆栈数据结构 stack.h // // // /// #include<iostream.h> template<class Type>class ...

  7. 微软等数据结构+算法面试100题全部答案集锦

    微软等数据结构+算法面试100题全部答案集锦 作者:July.阿财. 时间:二零一一年十月十三日. 引言 无私分享造就开源的辉煌. 今是二零一一年十月十三日,明日14日即是本人刚好开博一周年.在一周年 ...

  8. [整理I]精选微软等公司数据结构+算法面试100题 [第1-40题]

    精选微软等公司,数据结构+算法,经典面试100题                                       --------之前40题 --------------- ------- ...

  9. 2018汇总数据结构算法篇

    看图轻松理解数据结构和算法系列(数组) 看图轻松理解数据结构与算法系列(单向链表) 看图轻松理解数据结构与算法系列(双向链表) 看图轻松理解数据结构与算法系列(基于数组的栈) 看图轻松理解数据结构与算 ...

最新文章

  1. (68)自旋锁 , cmpxchg8b 指令
  2. IOS自带正则表达式NSPredicate的使用
  3. SAP Cloud for Customer(C4C)和微软Outlook的集成
  4. 句子相似度--余弦相似度算法的实现
  5. 简单的Client / Server 使用 linux 伯克利 socket实现
  6. python-hashlib模块-加密
  7. plsql日期转换错ORA-01830
  8. Silverlight Tools 安装失败 解决办法
  9. 乌班图服务器应用,Ubuntu下安装Apache
  10. wxpython 操作图片_wxpython 图像编程
  11. 工作3年以上的程序员现在都在做什么工作?
  12. 联想计算机不能进入系统桌面,联想笔记本电脑进不了桌面怎么办
  13. 创建一个Student 类 包含属性有 序号 姓名 年龄 生日 提供对应的setter/getter 创建对象,完成赋值(setter赋值和构造方法赋值) 在控制台输出学生对象的信息
  14. Java语言实现的各种排序
  15. 做网站用java 还是php_做网站用java还是php
  16. 802.11n PHY-MAC层帧结构解析
  17. 周鸿祎:恭喜腾讯穿铁裤衩 现在又养条狗
  18. 计算机关闭系统剪切板上的内容,怎样删除电脑粘贴板上的内容?三个方法教你清空剪切板...
  19. 省市2级联动静态代码,需要时候COPY下
  20. 2019南科大计算机系夏令营笔试面试

热门文章

  1. 基于arduino的ESP32 学习笔记(二) TFT_eSPI和LVGL库使用笔记
  2. 如何刻录服务器安装系统光盘启动,分享我的技巧 : 自己动手将系统补丁集成到原安装文件并刻录可启动系统光盘...
  3. PHP导出图表 ~~ PHPExcel
  4. Java项目实战——贪吃蛇
  5. python创建文件和文件夹
  6. AICPA CIMA四季度调查:超一半美国企业高管认为美国经济陷入衰退
  7. 〖大前端 - 基础入门三大核心之JS篇⑰〗- JavaScript的流程控制语句「while循环语句」
  8. 增速放缓、用户停滞,陌陌的未来不靠直播靠什么?
  9. away3d学习笔记 转载
  10. c#导出Excel NPOI方式