`

Dijkstra 实现最短路径

 
阅读更多

 

使用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;
}

 

运行结果:



 

  • 大小: 16.1 KB
  • 大小: 54.5 KB
分享到:
评论

相关推荐

    最短路径算法dijkstra的matlab实现_dijkstra_最短路径算法_

    总结起来,Dijkstra算法是解决最短路径问题的重要工具,其MATLAB实现使得算法的理解和应用变得更加便捷。通过理解算法原理并掌握MATLAB实现,我们可以更好地利用这一算法解决实际问题,特别是在图论和网络科学领域。

    贪心算法 Dijkstra 单源最短路径

    用C++实现的贪心算法 Dijkstra 单源最短路径,并包含大量的注释,对理解程序很有帮助

    Dijkstra最短路径算法的Matlab实现

    总结来说,Dijkstra最短路径算法的Matlab实现是一个实用的工具,它能帮助我们理解和解决涉及最短路径的问题,如网络路由、地图导航等。`Dijkstra2.m`和`print_path.m`文件分别负责算法的核心计算和路径的可视化展示...

    Dijkstra算法最短路径的C++实现与输出路径

    "Dijkstra算法最短路径的C++实现与输出路径" Dijkstra算法是解决单源最短路径问题的经典算法, 由荷兰计算机科学家Edsger W. Dijkstra在1956年提出。该算法可以解决从某个源点到其他所有顶点的最短路径问题。 ...

    Dijkstra求最短路径c++

    **正文** Dijkstra算法是一种经典的图论算法,用于在加权图中...在实际应用中,Dijkstra算法不仅可以解决两点间的最短路径问题,还可以扩展到多源最短路径问题,或者结合其他数据结构和算法优化复杂场景下的路径查找。

    KSP.zip_K._K最短路径_dijkstra_最短路径算法_最短路径路由

    本压缩包"KSP.zip"包含了关于K._K最短路径算法的内容,特别是Dijkstra的扩展应用,用于寻找图中一个起点到其他所有点的第k条最短路径。Dijkstra算法是图论中的一个核心算法,由荷兰计算机科学家艾兹格·迪杰斯特拉在...

    基于Java实现的Dijkstra最短路径寻径的实现..zip

    基于Java实现的Dijkstra最短路径寻径的实现..zip基于Java实现的Dijkstra最短路径寻径的实现..zip基于Java实现的Dijkstra最短路径寻径的实现..zip基于Java实现的Dijkstra最短路径寻径的实现..zip基于Java实现的...

    Dijkstra算法求最短路径的C/C++程序一

    此函数是Dijkstra算法的核心实现,计算从顶点`v0`到图中其他所有顶点的最短路径。参数`D[]`存储从`v0`到其他顶点的最短距离,`P[][]`存储最短路径上的顶点序列。 ### 主函数 ```c void main() { // ... 省略代码 ....

    Dijkstra算法找最短路径代码,dijkstra算法求最短路径,matlab

    总之,Dijkstra算法是解决最短路径问题的强大工具,而MATLAB作为强大的数值计算平台,为实现和分析这种算法提供了便利。通过学习和理解Dijkstra算法的MATLAB实现,不仅可以深入掌握图论知识,还可以提升在实际问题中...

    提交2_毕业设计_dijkstra_最短路径_dijkstra设计_最短路径算法_

    在IT领域,尤其是在图论和算法设计中,Dijkstra最短路径算法是一个极其重要的概念。这个算法由荷兰计算机科学家艾兹格·迪科斯彻在1956年提出,主要用于寻找图中从一个节点到其他所有节点的最短路径。在给定的毕业...

    Dijkstra单源最短路径代码 C/C++实现

    DIJKSTRA单源最短路径算法C/C++实现,内有注释,输入邻接矩阵,输入源点到终点最短路径长度。

    QT c++ dijkstra最短路径工程源码

    QT C++实现Dijkstra最短路径算法的工程源码提供了在图形用户界面(GUI)下解决图论问题的一个实例。这个项目结合了QT框架的强大功能和C++编程语言的灵活性,帮助开发者直观地理解和应用Dijkstra算法。以下是相关知识点...

    zuiduanlujing.rar_dijkstra_vb dijkstra_最短路径

    标题中的"zuiduanlujing.rar_dijkstra_vb dijkstra_最短路径"表明这是一个关于使用VB(Visual Basic)实现Dijkstra算法解决最短路径问题的项目。Dijkstra算法是图论中的一个经典算法,用于寻找图中两点间的最短路径...

    dijkstra最短路径算法

    通过dijkstra算法实现最短路径搜索

    GIS中使用改进的Dijkstra算法实现最短路径的计算1

    而最短路径分析是其关键的环竹,因而刘一其算法进行优化很有必要,为此在传统的最短路径算法,即DijksLra算法的基础上,采川一又堆结构来实现路径计算过程,优先级队列的一系列操作,从而提高了该算法的分析效率讨论...

    Dijkstra算法实现天津地铁最短路径查找

    Dijkstra算法是一种经典的图论算法,由荷兰计算机科学家艾兹格·迪科斯彻于1956年提出,主要用于解决单源最短路径问题。在这个场景中,我们利用Dijkstra算法来查找天津地铁网络中的最短路径。在VC++(Visual C++)...

    最短路径算法Dijkstra源代码

    最短路径算法Dijkstra是图论中的一个经典算法,由荷兰计算机科学家艾兹格·迪科斯彻在1956年提出。该算法主要用于寻找带权重的有向或无向图中,从一个特定顶点到其他所有顶点的最短路径。Dijkstra算法的核心思想是...

    基于Dijkstra算法的北京地铁最短换乘路径规划与计价模型实验报告配套程序,Dijkstra地铁最短路径规划带文档 实验报告基于Dijkstra算法的地铁最短乘路径规划及计价模型-以北京地铁为例

    基于Dijkstra算法的北京地铁最短换乘路径规划与计价模型实验报告配套程序,Dijkstra地铁最短路径规划带文档 实验报告《基于Dijkstra...,基于Dijkstra算法的北京地铁最短路径规划与计价模型实验报告及Python/C++程序实现

    Dijkstra_Dijkstra算法最短路径_

    Dijkstra算法,由荷兰计算机科学家艾兹格·迪科斯彻于1956年提出,是一种用于在加权图中寻找单源最短路径的算法。它保证了找到的路径是最优的,即从起点到每个顶点的路径长度都是最小的。在这个程序中,我们看到有两...

Global site tag (gtag.js) - Google Analytics