题目描述

在带权有向图G中,给定一个源点v,求从v到G中的其余各顶点的最短路径问题,叫做单源点的最短路径问题。

在常用的单源点最短路径算法中,迪杰斯特拉算法是最为常用的一种,是一种按照路径长度递增的次序产生最短路径的算法。

可将迪杰斯特拉算法描述如下:

在本题中,读入一个有向图的带权邻接矩阵(即数组表示),建立有向图并按照以上描述中的算法求出源点至每一个其它顶点的最短路径长度。

输入

输入的第一行包含2个正整数n和s,表示图中共有n个顶点,且源点为s。其中n不超过50,s小于n。

以后的n行中每行有n个用空格隔开的整数。对于第i行的第j个整数,如果大于0,则表示第i个顶点有指向第j个顶点的有向边,且权值为对应的整数值;如果这个整数为0,则表示没有i指向j的有向边。当i和j相等的时候,保证对应的整数为0。

输出

只有一行,共有n-1个整数,表示源点至其它每一个顶点的最短路径长度。如果不存在从源点至相应顶点的路径,输出-1。

请注意行尾输出换行。

样例输入

4 1
0 3 0 1
0 0 4 0
2 0 0 0
0 0 1 0

样例输出

6 4 7

提示

在本题中,需要按照题目描述中的算法完成迪杰斯特拉算法,并在计算最短路径的过程中将每个顶点是否可达记录下来,直到求出每个可达顶点的最短路径之后,算法才能够结束。

迪杰斯特拉算法的特点是按照路径长度递增的顺序,依次添加下一条长度最短的边,从而不断构造出相应顶点的最短路径。

另外需要注意的是,在本题中为了更方便的表示顶点间的不可达状态,可以使用一个十分大的值作为标记。

#include<cstdio>
#include<algorithm>
#include<string>
using namespace std;
const int maxn = 60;
const int INF = 1000000000;
int G[maxn][maxn];
int d[maxn];
bool vis[maxn] = {false};
int n,s;void Digistra(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(d[j]<MIN && vis[j]==false){MIN = d[j];u = j ;}}if(u==-1){return;}   vis[u] = true;for(int v=0;v<n;v++){if(G[u][v]!=0 && G[u][v]+d[u]<d[v] && vis[v]==false){d[v]=d[u]+G[u][v];}}}
}int main(){fill(G[0],G[0]+maxn*maxn,0);scanf("%d %d",&n,&s);int a[n][n];for(int i=0;i<n;i++){for(int j=0;j<n;j++){scanf("%d",&G[i][j]);}}Digistra(s);for(int i=0;i<n;i++){if(i!=s){if(d[i]!=INF){printf("%d ",d[i]);}elseprintf("-1 ");}}printf("\n");return 0;
}

问题 A: 算法7-15:迪杰斯特拉最短路径算法相关推荐

  1. 1768 Problem A 算法7-15:迪杰斯特拉最短路径算法

    问题 A: 算法7-15:迪杰斯特拉最短路径算法 时间限制: 1 Sec  内存限制: 32 MB 提交: 118  解决: 56 题目描述 在带权有向图G中,给定一个源点v,求从v到G中的其余各顶点 ...

  2. Codeup墓地-问题 A: 算法7-15:迪杰斯特拉最短路径算法

    题目描述 在带权有向图G中,给定一个源点v,求从v到G中的其余各顶点的最短路径问题,叫做单源点的最短路径问题. 在常用的单源点最短路径算法中,迪杰斯特拉算法是最为常用的一种,是一种按照路径长度递增的次 ...

  3. 迪杰斯特拉-最短路径算法

            迪杰斯特拉(Dijkstra)算法是基于动态规划实现的,他的主要功能是求出各节点到顶点的最短路径.         上图展示: 这是各节点连接图,其中A为顶点,求各节点到顶点的最短路径 ...

  4. 题目 1708: 数据结构-Dijskra(迪杰斯特拉)最短路径算法

    参考<大话数据结构> 题目描述 在带权有向图G中,给定一个源点v,求从v到G中的其余各顶点的最短路径问题,叫做单源点的最短路径问题. 在常用的单源点最短路径算法中,迪杰斯特拉算法是最为常用 ...

  5. python3dijkstra_python3 实现Dijkstra(迪杰斯特拉)最短路径算法

    Dijkstra 单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.Dijkstra算法是很有代表性的最短路径算法,在很多专业课程中 ...

  6. 算法7:迪杰斯特拉算法

    目录 1. 应用场景-最短路径问题 2. 迪杰斯特拉(Dijkstra)算法介绍 3. 迪杰斯特拉(Dijkstra)算法过程 4. 算法分析过程 5. 代码实现 1. 应用场景-最短路径问题 看一个 ...

  7. Java迪杰斯特拉(Dijkstra)算法与弗洛伊德(Floyd)算法

    1.Java迪杰斯特拉(Dijkstra)算法与弗洛伊德(Floyd)算法 1.1 迪杰斯特拉(Dijkstra)算法 1.1.1 迪杰斯特拉(Dijkstra)算法介绍 迪杰斯特拉(Dijkstra ...

  8. 最短路径 - 迪杰斯特拉(Dijkstra)算法

    对于网图来说,最短路径,是指两顶点之间经过的边上权值之和最少的路径,并且我们称路径上的第一个顶点为源点,最后一个顶点为终点.最短路径的算法主要有迪杰斯特拉(Dijkstra)算法和弗洛伊德(Floyd ...

  9. 【图】最短路径--迪杰斯特拉(Dijkdtra)算法

    迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径. 它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止. 算法思想 每次找到离源 ...

最新文章

  1. HDU 1596 find the safest road (Floyd)
  2. SWT 和 SWING
  3. MQTT数据传输之TCP数据流程
  4. 禁用Intel ME
  5. Linux通过第三方应用提权实战总结
  6. 使用Speedion 3.0.17或更高版本轻松从事务中返回值
  7. Go语言编程:Go语言实现快速排序算法
  8. oracle切换sqlserver,ORACLE语法转换成sqlserver,该如何解决
  9. Unity手游iOS内存分析和测试
  10. java web maven 结构及从零创建jfinal项目
  11. 计算机二进制转十进制怎么yun,二进制 十进制 十六进制
  12. 看美剧《疑犯追踪》,学地道美语 Learn idiomatic American English by watching Tv series Person of Interest
  13. win7怎么把计算机删除文件,win7不小心删除文件如何恢复_win7删除文件的四种恢复技巧...
  14. 2021年北京人大附中高考成绩查询,2021北京市地区高考成绩排名查询,北京市高考各高中成绩喜报榜单...
  15. 入职要求提供上家公司的工资银行流水?
  16. 终于明白#!bin/sh是什么意思了
  17. 显示12306服务器处理中正在排队,12306排队等待中怎么回事_12306排队等待时间_12306一直在排队解决方法...
  18. 费曼算法(Feynman algorithm)
  19. uniapp 手写canvas海报(兼容android/ios/h5/微信小程序)
  20. APP开发之apicloud(一)

热门文章

  1. 基于MATLAB的疲劳驾驶检测系统
  2. C语言之判断身高体重正常指数
  3. Java实现扑克牌的洗牌发牌看牌
  4. 计算机专业论文系统设计与实现,计算机专业毕业论文-个人博客系统的设计与实现.doc...
  5. Linux Ubuntu Python Django MTV后端开发
  6. Win11三指触控怎么设置?
  7. 无密码卸载Symantec Endpoint Protection 11
  8. linux万能显卡,Linux N卡驱动年终盘点:干得漂亮
  9. 电脑箭头,电脑箭头符号怎么打出来(往返箭头符号图案)
  10. GD32片内flash读写数据