图论之Dijkstra算法求最短路径
来源:互联网 发布:2017年6月进出口数据 编辑:程序博客网 时间:2024/06/05 15:40
前言:因为要参加竞赛,因此就复习了一下图论方面的知识,总结一下利用Dijkstra算法求最短路径的一般思想与方法,这里先分析下无向图。
一、Dijkstra算法基本思想:
基本思想是: 假设网络中每个点Vj都有一对标号(distj,prev),其中distj就是最短从原点S到Vj的最短路径,prev则是S到J的最短路径的前面一个点。
二、使用条件:
Dijkstra算法的使用条件是:网络中所有的弧圈都非负,即各个点之间的权没有负数存在,这点是显而易见的。
三、代码分析:
下面是一个简单的例子,求一个无向图各个点之间的最短路径。(ps:因为这个图是我自己画的,粗糙请见谅)
下面直接上代码:
//好-Dijkstra算法的流程图-有源程序.doc/*运行结果:A->A:0A->B:3A->C:8A->D:8A->E:7B->A:3B->B:0B->C:5B->D:6B->E:4C->A:8C->B:5C->C:0C->D:4C->E:6D->A:8D->B:6D->C:4D->D:0D->E:2E->A:7E->B:4E->C:6E->D:2E->E:0*/#include <stdio.h>//#include "Conio.h"#define TRUE 1#define FALSE 0#define I 9999 // 无穷大 #define N 5 // 城市顶点的数目 int cost[N][N] = { //各点到其他点的弧长二维数组,I表示没有直接联系 {0,3,I,8,I}, {3,0,5,I,4}, {I,5,0,4,7}, {8,I,4,0,2}, {I,4,7,2,0}};int dist[N]; // 存储当前最短路径长度 dist为起始顶点到该点的最短路径int v0 = 'A' - 65; // 初始点是 A int main(){ int status[N],i,v,w,min,k; printf("\n任意两个定点之间的最短路径如下:\n\n"); for(k=0;k<N;k++) //做一个N=5重循环 { // 初始化最短路径长度数据,所有数据都不是最终数据 for (v = 0; v < N; v++){ status[v] = FALSE; //初始化,集合s都为假,即都没有永久标号 dist[v] = cost[v0][v]; } // 首先选v0到v0的距离一定最短,最终数据 status[v0] = TRUE; //把A标记为永久标号 // 寻找另外 N-1 个结点 for (i = 0; i < N-1; i++){ min = I; // 初始最短长度无穷大 // 寻找最短的边 for (w = 0; w < N; w++){ if (!status[w] && dist[w] < min) //s集合中值为假且最短路径小于min的{ min = dist[w]; v = w;}} status[v] = TRUE; // 加入新边 for (w = 0; w < N; w++){ // 更新 dist[] 数据 if (!status[w] && dist[v] + cost[v][w] < dist[w]){ dist[w] = dist[v] + cost[v][w];}}} for (i = 0; i < N; i++){ printf("%c->%c: %2d\t", v0 + 65, i + 65, dist[i]);} printf("\n"); v0++;} return 0;}
下面分析下这个程序:
参数设置:
cost[N][N]:各个点之间的弧权。原点分别是从A到E
dist[N]; dist为起始顶点到该点的最短路径。
status :用来存储具有永久标号的顶点,ture为标号,false为未标号
待续未完。。。。。。
0 0
- 图论之Dijkstra算法求最短路径
- 求最短路径之Dijkstra算法
- 图论算法之最短路径(Dijkstra算法)
- 求最短路径之——Dijkstra算法
- 动态规划之Dijkstra算法求最短路径
- 图论之最短路径-------Dijkstra算法
- dijkstra 求最短路径算法
- Dijkstra算法求最短路径
- Dijkstra 算法求最短路径
- Dijkstra算法求最短路径
- Dijkstra算法求最短路径
- Dijkstra 求最短路径算法
- Dijkstra算法 ---求最短路径
- Dijkstra算法求最短路径
- dijkstra算法求最短路径
- dijkstra算法求最短路径
- Dijkstra算法求最短路径
- dijkstra算法求最短路径
- TQ2440移植yaffs2文件系统基于linux 2.6.30.4
- ios之协议传值(Protocol)
- (十)泛型算法
- 一个经验法则
- cvCopy与cvCloneImage的区别
- 图论之Dijkstra算法求最短路径
- 2014.3.1
- Mat 的一些基本的初始化
- JAVA方法中的参数用final来修饰的原因
- 谷歌
- SRAM与SDRAM的比较
- 使用monkeyrunner命令行、文件、eclipse平台运行全解
- ICMP报文的格式和种类
- Opencv 图像处理——形态学方法