Dijskra迪杰斯特拉算法
图
输出最短的路径,这里以源点0=>6进行说明,dist[6]=16
,即该路最短路径长度为16。path[6]=4,path[4]=5,path[5]=2,path[2]=1,path[1]=0
,反推出最短路径为0 -> 1-> 2 -> 5 - > 4 -> 6
从顶点0到顶点1的路径长度为:4 路径为:0,1
从顶点0到顶点2的路径长度为:5 路径为:0,1,2
从顶点0到顶点3的路径长度为:6 路径为:0,3
从顶点0到顶点4的路径长度为:10 路径为:0,1,2,5,4
从顶点0到顶点5的路径长度为:9 路径为:0,1,2,5
从顶点0到顶点6的路径长度为:16 路径为:0,1,2,5,4,6
dijskra算法代码实现
#ifndef UNTITLE_MATGRAPH_H
#define UNTITLE_MATGRAPH_H#endif //UNTITLE_MATGRAPH_H
#define MAXV 10
#define INF 32767
typedef struct {int no; //顶点的编号char info; //顶点的其他信息
}VertexType; //顶点的类型
typedef struct {int edges[MAXV][MAXV]; //邻接矩阵数组int n, e; //定点数,边数VertexType vexs[MAXV]; //存放顶点信息
}MatGraph; //完整的邻接矩阵类型
#include "../MatGraph.h"
#include "bits/stdc++.h"using namespace std;void DisPath(MatGraph g, int dist[], int path[], int S[], int v);/**** @param g 邻接矩阵* @param v 起始顶点编号*/
void Dijkstra(MatGraph g, int v) {int dist[MAXV], path[MAXV];int S[MAXV];int mindis, i, j, u;for (i = 0; i < g.n; i++) {dist[i] = g.edges[v][i];S[i] = 0;if (g.edges[v][i] < INF) {path[i] = v;} else {path[i] = -1;}}S[v] = 1;path[v] = -1;for (i = 0; i < g.n - 1; i++) {mindis = INF;/// 选取不在{S}中,即在{U}中具有最小路径的顶点ufor (j = 0; j < g.n; i++)if (S[j] == 0 && dist[j] < mindis) {u = j;mindis = dist[j];}/// 将最小的顶点u加入{S}集合中S[u] = 1;for (j = 0; j < g.n; j++) {/// 修改不在{S}中即{U}中的最短路径if (S[j] == 0) {/// 这里参考图的 0~1行假设当前的 u = 1, j = 2if (g.edges[u][j] < INF && dist[u] + g.edges[u][j] < dist[j]) {dist[j] = dist[u] + g.edges[u][j];path[j] = u;}}}}DisPath(g, dist, path, S, v);
}void DisPath(MatGraph g, int dist[], int path[], int S[], int v) {int i, j, k;int apath[MAXV], d;for (i = 0; i < g.n; i++)if (S[i] == 1 && i != v) {printf("从顶点%d到顶点%d的路径长度为: %d\t路径为: ", v, i, dist[i]);d = 0;apath[d] = i;k = path[i];if (k == -1) {printf("没有路径");} else {while (k != v) {d++;apath[d] = k;k = path[k];}d++;apath[d] = v;printf("%d", apath[d]);for (j = d - 1; j >= 0; j--)printf(", %d", apath[j]);printf("\n");}}
}
ppt下载
链接:https://pan.baidu.com/s/1sgOfG4Cdu53OBguJovPGaQ
提取码:6666
复制这段内容后打开百度网盘手机App,操作更方便哦
Dijskra迪杰斯特拉算法相关推荐
- 题目 1708: 数据结构-Dijskra(迪杰斯特拉)最短路径算法
参考<大话数据结构> 题目描述 在带权有向图G中,给定一个源点v,求从v到G中的其余各顶点的最短路径问题,叫做单源点的最短路径问题. 在常用的单源点最短路径算法中,迪杰斯特拉算法是最为常用 ...
- 迪杰斯特拉算法(C语言实现)
迪杰斯特拉算法(C语言实现) 如上图,求以a为源点到个顶点的最短路劲. #include "stdio.h" #include "stdlib.h" //用一个 ...
- C++迪杰斯特拉算法求最短路径
一:算法历史 迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题.迪杰斯特拉算法主要特点是以 ...
- 迪杰斯特拉算法——PAT 1003
本文主要是将我对于我对于迪杰斯特拉算法的理解写出来,同时通过例题来希望能够加深对于算法的理解,其中有错误的地方希望大家指正. 迪杰斯特拉算法 我将这个算法理解成一个局部到整体的算法,这个方法确实越研究 ...
- 单源最短路径-Dijkstra(迪杰斯特拉算法)
迪杰斯特拉算法时间复杂度为O(n^2),其中n为顶点个数. 该算法用于求单源最短路径.并且图中的边不允许带负权值. #include <iostream> using namespace ...
- JavaScript实现dijkstra迪杰斯特拉算法(附完整源码)
JavaScript实现dijkstra迪杰斯特拉算法 PriorityQueue完整源代码 MinHeap.js完整源代码 Heap.js完整源代码 Comparator.js完整源代码 dijks ...
- C++实现Dijkstra(迪杰斯特拉)算法(附完整源码)
C++Dijkstra迪杰斯特拉算法的实现 C++Dijkstra(迪杰斯特拉)算法的完整源码(定义,实现,main函数测试) C++Dijkstra(迪杰斯特拉)算法的完整源码(定义,实现,main ...
- C语言实现Dijkstra(迪杰斯特拉)算法(附完整源码)
Dijkstra迪杰斯特拉 Graph结构体定义 迪杰斯特拉算法完整源码(定义,实现,main函数测试) Graph结构体定义 struct Graph {int vertexNum;int **ed ...
- 狄斯奎诺算法 c语言,图的邻接表实现迪杰斯特拉算法(C语言).doc
图的邻接表实现迪杰斯特拉算法(C语言) /*迪杰斯特拉算法(狄斯奎诺算法)解决的是从源点到其它所有顶点的最短路径问题*/ //算法实现: #include #include #define MAX 2 ...
最新文章
- Linux下find命令详情
- Shiro SpringMVC 非maven HelloWorld
- 什么是连续潮流cpf_2019童装秋冬潮流趋势报告:一文读懂童装潮流四大消费趋势...
- PHP-代码审计-文件读取(下载)
- 提高页面显示速度的秘技
- php7 imagick扩展,php7安装imagick扩展
- PHP计算字符串的个数
- 在VS 2010中查询和导航代码
- 将数据集转换为Excel格式的一个实现
- spring + mybatis + 多数据源整合事务
- java俄罗斯方块代码_[转载]java编写的一个俄罗斯方块(源代码)
- linux的pcan驱动安装
- PS 将图片渐变透明
- iWebShop核心团队启动shukai新域名,进入全案SEO网络营销领域发力SEO众包外包服务
- js实现外链访问劫持代码 可劫持百度快照
- 本周周报-20220109
- mac调整启动台图标
- 【知识科普】解读闪电/雷电网络,零基础秒懂!
- 我终于有了GMAIL帐号了
- 编程漫谈(十一): 编程概要