参考《大话数据结构》

题目描述

在带权有向图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<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
#define MAXEDGE 50//题目要求顶点数最大为50
#define MAXVEX 50
#define INFINITY_ 65535
typedef struct{//数据结构int vexs[MAXVEX];int arc[MAXVEX][MAXVEX];int numVertexes,numEdges;
}MGraph;
typedef int Patharc[MAXVEX];//用于存储最短路径下标的数组,值为前驱顶点的下标
typedef int ShortPathTable[MAXVEX];//用于存储到个点最短路径的权值和,值表示v0到v的最短路径长度和
void ShortestPath_Dijkstra(MGraph,int,Patharc*,ShortPathTable*);//算法
void initial(MGraph*,int);//初始化
void print(ShortPathTable*,int,int);//打印
int main(){MGraph g;int n,s;scanf("%d %d",&n,&s);initial(&g,n);Patharc P;ShortPathTable D;ShortestPath_Dijkstra(g,s,&P,&D);print(&D,n,s);
}
void initial(MGraph* g,int n){g->numVertexes=n;for(int i=0;i<g->numVertexes;i++){for(int j=0;j<g->numVertexes;j++){scanf("%d",&(g->arc[i][j]));if(g->arc[i][j]==0){//题目要求若两个顶点没有边,则用0表示,这里用65535表示方便算法执行g->arc[i][j]=INFINITY_;}if(i==j)//顶点到自身权值依旧为0g->arc[i][j]=0;}}
}
void ShortestPath_Dijkstra(MGraph g,int s,Patharc*P,ShortPathTable*D){int final[g.numVertexes];int k;for(int i=0;i<g.numVertexes;i++){final[i]=0;(*P)[i]=-1;(*D)[i]=g.arc[s][i];}final[s]=1;(*D)[s]=0;for(int i=1;i<g.numVertexes;i++){int min=INFINITY_;for(int j=0;j<g.numVertexes;j++){if(!final[j]&&(*D)[j]<min){k=j;min=(*D)[j];}}final[k]=1;for(int j=0;j<g.numVertexes;j++){if(!final[j]&&(min+g.arc[k][j]<(*D)[j])){(*D)[j]=min+g.arc[k][j];(*P)[j]=k;}}}
}
void print(ShortPathTable*D,int n,int s){for(int i=0;i<n;i++){if(i!=s)if((*D)[i]==65535)printf("%d ",-1);else printf("%d ",(*D)[i]);}
}

题目 1708: 数据结构-Dijskra(迪杰斯特拉)最短路径算法相关推荐

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

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

  2. 数据结构——图——迪杰斯特拉(Dijkstra )算法

    数据结构--图--迪杰斯特拉(Dijkstra )算法 这是一个按路径长度递增的次序产生最短路径的算法.它的思路大体是这样的. 比如说要求图7-7-3中顶点v0到顶点v1的最短距离,没有比这更简单的了 ...

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

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

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

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

  5. 问题 A: 算法7-15:迪杰斯特拉最短路径算法

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

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

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

  7. 数据结构与算法(7-4)最短路径(迪杰斯特拉(Dijkstra)算法、弗洛伊德(Floyd)算法)

    目录 一.最短路径概念 二.迪杰斯特拉(Dijkstra)算法(单源最短路径) 1.原理 2.过程 3.代码 三.弗洛伊德(Floyd)算法(多源最短路径) 1.原理 2.存储 3.遍历 4.代码 参 ...

  8. 059.迪杰斯特拉(Dijkstra)算法的原理以及解决最短路径问题

    1. 迪杰斯特拉(Dijkstra)算法的原理 1.1. 算法应用场景-最短路径问题 1.2. 基本介绍 1.3. 步骤详解 1.4. 思路解析 1.5. 图解步骤 2. 迪杰斯特拉(Dijkstra ...

  9. java数据结构和算法——迪杰斯特拉(Dijkstra)算法

    目录 一.迪杰斯特拉(Dijkstra)算法介绍 二.迪杰斯特拉(Dijkstra)算法过程 三.迪杰斯特拉(Dijkstra)算法--应用场景(最短路径问题) 四.迪杰斯特拉(Dijkstra)算法 ...

最新文章

  1. SummarizedExperiment类使用
  2. ETSI MEC — 与 5G 的融合
  3. UA MATH563 概率论的数学基础 鞅论初步5 鞅的定义
  4. pps+linux版+x64,64位Ubuntu 11.04安装PPS的办法
  5. 如何将单选题多选题分开_别再说不会分析多选题了!这6种方法解决你的烦恼!...
  6. Ubuntu failed to fetch ... hash sum mismatch
  7. P3181-[HAOI2016]找相同字符【SAM】
  8. 今天的但我发现了幸福的超级玛丽,白萝卜的种子
  9. POJ1273 Drainage Ditches(最大流基础题)
  10. 如何在Nintendo Switch上管理和传输数据
  11. 快解析结合任我行crm
  12. 【解题报告】Kattis - adjoin 树形dp
  13. Eqs POJ - 1840
  14. Arduino中Serial.print()与Serial.write()函数的区别,以及串口通信中十六进制与字符串的收发格式问题和转换过程详解
  15. STM32添加以太网连接
  16. Arduino提高篇11—烟雾传感器MQ-2
  17. Dicom 图像--像素值(灰度值)转为CT值
  18. acrh17华硕固件_华硕路由器Asus RT-ACRH17 OpenWrt,刷openwrt教程
  19. U盘引导盘制作工具 Rufus 3.13.1730 正式版
  20. LDREX and STREX

热门文章

  1. 获取 本地/网 络图片尺寸
  2. serialport中Cannot set headers after they are sent to the client
  3. 我与一只流浪猫的相遇
  4. 使用react-native-audio进行华为云语音交互服务(实时语音转写)大致流程
  5. python随机生成10个浮点数_python生成10个随机数
  6. php怎么设置页间全局变量,PHP怎么设置全局变量?
  7. python queue put阻塞_python 队列(queue)阻塞
  8. 【数据结构】二叉堆、TOP K 问题
  9. 2022年回顾 | 被磨砺,被厚待
  10. 单例模式的理解?单例模式如何实现?单例模式应用场景