使用Dijkstra算法求网络图中的最短路径是一种很常见的数据结构内容。
1、求出最短路径
2、计算最短路径的线路(routine)
如下图:
程序代码:
graph.c
/* * graph.c * * Created on: 2011年8月29日 * Author: ww */ #include "graph.h" #include <stdio.h> #define N 6 #define MAX 1000000 int graph[N][N] = { { MAX, MAX, 10, MAX, 30, 100 }, { MAX, MAX, 5, MAX, MAX, MAX }, { MAX, MAX, MAX, 50, MAX, MAX }, { MAX, MAX, MAX, MAX, MAX, 10 }, { MAX, MAX, MAX, 20, MAX, 60 }, { MAX, MAX, MAX, MAX, MAX, MAX } }; int routine[N][N] = { { 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0 }, { 0, 2, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0 }, { 0, 4, 0, 0, 0, 0 }, { 0, 5, 0, 0, 0, 0 } }; void Dijkstra() { int d[N] = { MAX, MAX, 10, MAX, 30, 100 }; int isMins[N] = { 0 }; int i, j = 0, min, v; for (i = 1; i < N; i++) { min = MAX; for (j = 0; j < N; j++) { if (isMins[j] != 1 && d[j] < min) { min = d[j]; v = j; } } isMins[v] = 1; for (j = 0; j < N; j++) { if (isMins[j] != 1 && min + graph[v][j] < d[j]) { d[j] = min + graph[v][j]; if (routine[j][0] == 1) { routine[j][0] = 1; routine[j][1] = v; routine[j][2] = j; } else { int x = 1; while (routine[v][x]) { routine[j][x] = routine[v][x]; x++; } routine[j][x] = j; } } } } for (i = 0; i < N; i++) { printf("0-->%d 距离为 %d \n", i, d[i]); } for (i = 1; i < N; i++) { printf("到%d的路线为:", i); for (j = 1; j < N; j++) { printf("%5d", routine[i][j]); } printf("\n"); } }
graph.h
/* * graph.h * * Created on: 2011年8月29日 * Author: ww */ #ifndef GRAPH_H_ #define GRAPH_H_ void Dijkstra(); #endif /* GRAPH_H_ */
main.c
/* * main.c * * Created on: 2011年8月21日 * Author: ww */ #include <stdio.h> #include <stdlib.h> #include "graph.h" int main(int argc, char **argv) { Dijkstra(); return 1; }
运行结果:
相关推荐
总结起来,Dijkstra算法是解决最短路径问题的重要工具,其MATLAB实现使得算法的理解和应用变得更加便捷。通过理解算法原理并掌握MATLAB实现,我们可以更好地利用这一算法解决实际问题,特别是在图论和网络科学领域。
用C++实现的贪心算法 Dijkstra 单源最短路径,并包含大量的注释,对理解程序很有帮助
总结来说,Dijkstra最短路径算法的Matlab实现是一个实用的工具,它能帮助我们理解和解决涉及最短路径的问题,如网络路由、地图导航等。`Dijkstra2.m`和`print_path.m`文件分别负责算法的核心计算和路径的可视化展示...
"Dijkstra算法最短路径的C++实现与输出路径" Dijkstra算法是解决单源最短路径问题的经典算法, 由荷兰计算机科学家Edsger W. Dijkstra在1956年提出。该算法可以解决从某个源点到其他所有顶点的最短路径问题。 ...
**正文** Dijkstra算法是一种经典的图论算法,用于在加权图中...在实际应用中,Dijkstra算法不仅可以解决两点间的最短路径问题,还可以扩展到多源最短路径问题,或者结合其他数据结构和算法优化复杂场景下的路径查找。
本压缩包"KSP.zip"包含了关于K._K最短路径算法的内容,特别是Dijkstra的扩展应用,用于寻找图中一个起点到其他所有点的第k条最短路径。Dijkstra算法是图论中的一个核心算法,由荷兰计算机科学家艾兹格·迪杰斯特拉在...
基于Java实现的Dijkstra最短路径寻径的实现..zip基于Java实现的Dijkstra最短路径寻径的实现..zip基于Java实现的Dijkstra最短路径寻径的实现..zip基于Java实现的Dijkstra最短路径寻径的实现..zip基于Java实现的...
此函数是Dijkstra算法的核心实现,计算从顶点`v0`到图中其他所有顶点的最短路径。参数`D[]`存储从`v0`到其他顶点的最短距离,`P[][]`存储最短路径上的顶点序列。 ### 主函数 ```c void main() { // ... 省略代码 ....
总之,Dijkstra算法是解决最短路径问题的强大工具,而MATLAB作为强大的数值计算平台,为实现和分析这种算法提供了便利。通过学习和理解Dijkstra算法的MATLAB实现,不仅可以深入掌握图论知识,还可以提升在实际问题中...
在IT领域,尤其是在图论和算法设计中,Dijkstra最短路径算法是一个极其重要的概念。这个算法由荷兰计算机科学家艾兹格·迪科斯彻在1956年提出,主要用于寻找图中从一个节点到其他所有节点的最短路径。在给定的毕业...
DIJKSTRA单源最短路径算法C/C++实现,内有注释,输入邻接矩阵,输入源点到终点最短路径长度。
QT C++实现Dijkstra最短路径算法的工程源码提供了在图形用户界面(GUI)下解决图论问题的一个实例。这个项目结合了QT框架的强大功能和C++编程语言的灵活性,帮助开发者直观地理解和应用Dijkstra算法。以下是相关知识点...
标题中的"zuiduanlujing.rar_dijkstra_vb dijkstra_最短路径"表明这是一个关于使用VB(Visual Basic)实现Dijkstra算法解决最短路径问题的项目。Dijkstra算法是图论中的一个经典算法,用于寻找图中两点间的最短路径...
通过dijkstra算法实现最短路径搜索
而最短路径分析是其关键的环竹,因而刘一其算法进行优化很有必要,为此在传统的最短路径算法,即DijksLra算法的基础上,采川一又堆结构来实现路径计算过程,优先级队列的一系列操作,从而提高了该算法的分析效率讨论...
Dijkstra算法是一种经典的图论算法,由荷兰计算机科学家艾兹格·迪科斯彻于1956年提出,主要用于解决单源最短路径问题。在这个场景中,我们利用Dijkstra算法来查找天津地铁网络中的最短路径。在VC++(Visual C++)...
最短路径算法Dijkstra是图论中的一个经典算法,由荷兰计算机科学家艾兹格·迪科斯彻在1956年提出。该算法主要用于寻找带权重的有向或无向图中,从一个特定顶点到其他所有顶点的最短路径。Dijkstra算法的核心思想是...
基于Dijkstra算法的北京地铁最短换乘路径规划与计价模型实验报告配套程序,Dijkstra地铁最短路径规划带文档 实验报告《基于Dijkstra...,基于Dijkstra算法的北京地铁最短路径规划与计价模型实验报告及Python/C++程序实现
Dijkstra算法,由荷兰计算机科学家艾兹格·迪科斯彻于1956年提出,是一种用于在加权图中寻找单源最短路径的算法。它保证了找到的路径是最优的,即从起点到每个顶点的路径长度都是最小的。在这个程序中,我们看到有两...