图的邻接矩阵表示与最短路径算法( Dijkstra )代码实现
来源:互联网 发布:淘宝网上有卖烟的吗 编辑:程序博客网 时间:2024/05/16 12:40
#include <stdio.h>#define MAX_VERTEX_NUM 20 //最大顶点个数typedef int VRTYPE, InfoType;typedef enum {DG, DN, UDG, UDN} GraphKind; //{有向图、有向网、无向图、无向网}typedef struct ArcCell{ VRTYPE adj; //无权图为0或1; 带权图为权值 InfoType *info;}ArcCell, AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];typedef struct{ AdjMatrix arcs; //邻接矩阵,这里以数组下标唯一标识每个顶点 int vexnum, arcnum; GraphKind kind; }MGraph;void create_G(MGraph *G){ int i, j, v; printf("输入顶点数:\n"); scanf("%d", &G->vexnum); printf("输入弧数:\n"); scanf("%d", &G->arcnum); for (int m = 0; m < G->vexnum; m++) for (int n = 0; n < G->vexnum; n++) G->arcs[m][n].adj = -1; //不联通的弧设置其弧长为-1 printf("请按照起点号、终点号、弧长输入每条弧的信息:\n"); for (int k = 0; k < G->arcnum; k++) { scanf("%d%d%d", &i, &j, &v); //有弧连接的顶点对以及弧的权重,弧从i指向j(默认有向图) G->arcs[i][j].adj = v; }}void show_G(MGraph G) //展示创建的邻接矩阵{ printf("\n创建的邻接矩阵:\n"); for (int m = 0; m < G.vexnum; m++) { for (int n = 0; n < G.vexnum; n++) printf("%3d ", G.arcs[m][n].adj); printf("\n"); } printf("\n");}void ShortestPath_DIJ(MGraph G, int v0) //最短路算法{ int D[MAX_VERTEX_NUM]; bool S[MAX_VERTEX_NUM] = { false }; for (int i = 0; i < G.vexnum; i++) D[i] = G.arcs[v0][i].adj; D[v0] = 0; S[v0] = true; for (int i = 0; i < G.vexnum; i++) { int j = 0, min = 0; for (int m = 0; m < G.vexnum; m++) //找出当前必定是最短路的点 { if (min == 0 && D[m] != -1 && !S[m]) { min = D[m]; j = m; } else if (D[m] < min && D[m] != -1 && !S[m]) { j = m; } } S[j] = true; for (int k = 0; k < G.vexnum; k++) //更新 if (!S[k]) if (G.arcs[j][k].adj != -1) { if (D[k] == -1) D[k] = D[j] + G.arcs[j][k].adj; else if (D[j] + G.arcs[j][k].adj < D[k]) D[k] = D[j] + G.arcs[j][k].adj; } } printf("\n编号为%d顶点到其它顶点的最短路:\n", v0); for (int i = 0; i < G.vexnum; i++) printf("%d ", D[i]);}void main(){ MGraph G; create_G(&G); show_G(G); ShortestPath_DIJ(G, 0);}
0 0
- 图的邻接矩阵表示与最短路径算法( Dijkstra )代码实现
- Dijkstra算法-最短路径-邻接矩阵表示
- 最短路径算法之Dijkstra算法(邻接矩阵实现)
- 基于邻接矩阵存储的图的最短路径问题(Dijkstra算法)
- 最短路径(邻接矩阵)-Dijkstra算法
- 最短路径(二)—Dijkstra算法(通过边实现松弛:邻接矩阵)
- Dijkstra 最短路径算法的设计与PHP实现
- 最短路径之Dijkstra算法的概念与实现
- Dijkstra算法的最短路径实现
- dijkstra最短路径算法的实现
- 图的最短路径算法(Dijkstra,Floyd)的实现
- C语言实现图的最短路径Dijkstra算法
- 草草实现的随机图产生器(邻接矩阵)和最短路径算法
- 图的最短路径dijkstra算法
- Dijkstra算法--图的最短路径
- 图的最短路径(dijkstra算法/floyd算法)
- 有向图中单个源点到终点的最短路径--Dijkstra算法与实现
- 最短路径算法—Dijkstra(迪杰斯特拉)算法分析与实现代码(C/C++)
- 基数、选择性、直方图
- 二叉树的二叉链表存储结构构建以及先序遍历
- Linux Core Dump
- Linux core dump详解
- 【kaldi】VMware12+Ubuntu16.04+kaldi安装遇到的问题
- 图的邻接矩阵表示与最短路径算法( Dijkstra )代码实现
- Phaser.js音频资源处理篇
- SIZE AUTO和SIZE SKEWONLY在gather_table_stats时的区别
- spring4.2.6加入json支持
- app登录接口做接口测试
- 写在2016年5月26日
- eclipse中DDMS报错:你的主机中的软件中止了一个已建立的连接。
- how to run an android emulator in ubuntu 14.04
- Oracle 11gExtension Statistics and Expression Statistics