基于连接矩阵的无向图最短路径Dijkstra算法
来源:互联网 发布:淘宝提示自助开通 编辑:程序博客网 时间:2024/05/18 14:28
#include <stdio.h>void Dijkstra(){ enum {maxdist = 999,}; int n = 5;int map [5][5] = {maxdist, 1, maxdist, maxdist, maxdist, 1, maxdist, maxdist, 1, 1,maxdist, maxdist, maxdist, maxdist, 1,maxdist, 1, maxdist, maxdist, 1,maxdist, 1, 1, 1, maxdist,};int used [5] = { 1,0,0,0,0};int dist [5] = {maxdist,0,0,0,0}; for(int i = 0; i < n; i++) dist[i] = map[0][i];int k = 0; for(int i = 1; i < n; i++){ int tmin = maxdist; for(int j = 0; j < n; j++) { if( !used[j] && tmin > dist[j] ){ tmin = dist[j]; k = j; }}used[k] = 1; for(int j = 0; j < n; j++) { if( dist[k] + map[k][j] < dist[j] ) dist[j] = dist[k] + map[k][j]; } }// Printf Resultsfor (int i = 0; i < n; i ++){printf("dist[%d]=%d\n", i, dist[i]);}}int main(int argc, char * argv []){return Dijkstra();}
教科书
#include <stdio.h>#include <string.h>#define Infinit (999)#define MAX_VERTEX_NUM(5)typedef int AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];struct MGraph{int vexnum;AdjMatrix arcs;};void Dijkstra(MGraph G){ int path[MAX_VERTEX_NUM][MAX_VERTEX_NUM];memset(path, 0, sizeof(path));int dist [MAX_VERTEX_NUM];memset(dist, 0, sizeof(dist));int used [MAX_VERTEX_NUM];memset(used, 0, sizeof(used));int v = 0, w = 0;// Initializefor (v = 0; v < G.vexnum; ++v){used[v] = false;dist[v] = G.arcs[0][v];// Clear pathfor (w = 0; w < G.vexnum; ++w) path[v][w] = false;// Only add self and the directly-connected vertex.if (dist[v] < Infinit){path[v][0] = true; path[v][v] = true;}}dist [0] = 0; used[0] = true;for (int k = 1; k < G.vexnum; ++k){int mindist = Infinit;for (w = 0; w < G.vexnum; ++w){if (!used[w] && dist[w] < mindist){v = w; mindist = dist[w];}}used[v] = true;for (w = 0; w < G.vexnum; ++w){if (!used[w] && (mindist + G.arcs[v][w] < dist[w])){dist [w] = mindist + G.arcs[v][w];// Append [v] vertex.memcpy(path[w], path[v], sizeof(path[v])); path [w][w] = true;}}}// Print Resultsfor (int k = 0; k < G.vexnum; ++k){printf("Distance[%d] = %d, Path: ", k, dist[k]);for (v = 0; v < G.vexnum; ++v){printf("%d, ", path[k][v]);}printf("\n");}}int main(int argc, char * argv []){MGraph G = {5, {Infinit, 2, 1, 1, 4, 2, Infinit, Infinit, Infinit, Infinit, 1, Infinit, Infinit, Infinit, Infinit, 1, Infinit, Infinit, Infinit, Infinit, 4, Infinit, Infinit, Infinit, Infinit, }};return Dijkstra(G);}
- 基于连接矩阵的无向图最短路径Dijkstra算法
- 无向图最短路径dijkstra算法
- Dijkstra无向图最短路径
- 无向网图的最短路径--Dijkstra算法
- 基于无向图且权重单一的最短路径Dijkstra算法——JAVA实现
- 无向图的最短路径求解算法之——Dijkstra算法
- 无向图的最短路径求解算法之——Dijkstra算法【转】
- 无向图的最短路径求解算法之——Dijkstra算法
- Dijkstra 最短路径算法详解 无向图
- 无向图求最短路径 迪杰斯特拉(dijkstra)算法实现
- 用Dijkstra算法求解无向图的最短路径
- Dijkstra算法--有向图的源点到其他顶点的最短路径(连接矩阵、邻接矩阵两种方式)
- 迪杰斯特拉算法处理无向图中最短路径的(dijkstra)Java实现(指定两点,求最短距离及路径)
- 基于Dijkstra算法的路径导航
- 基于矩阵合同变换算法的无向图同构识别——C++代码实现
- 无向图最短路径算法(C#)实现
- 有向图的无权图最短路径算法与带权图的Dijkstra算法
- Dijkstra 有向带权最短路径算法的简明阐释
- Greenplum Database Installation Segment on RHEL 5
- 2013-09-17
- 冗余路由协议
- 转载----如何掌握程序语言
- 开发日志:struts标签[<s:selec>/<s:submit>/<s:form>......] 在table的时候位置错误 [会自动换行/自动生成tr、td的问题]
- 基于连接矩阵的无向图最短路径Dijkstra算法
- Drupal7模块multiselect使用
- 关于Linux文件权限的简要说明
- PBS作业调度应用与说明
- 大机学习之CICS---CH.1
- C中#if 0 和#if 1
- QT Ui生成.h
- 【转载】【leetcode】Gray Code
- Leetcode Convert Sorted List to Binary Search Tree