图的最短路径算法实验
实验内容
1.采用邻接矩阵表示法创建下图并输出它。
2. 用迪杰斯特拉算法求下图0为源点到其余各顶
#include <stdio.h> #include <stdlib.h> #define MaxSize 100 typedef struct { int vexs[MaxSize]; int arcs[MaxSize][MaxSize]; int vexnum; int arcsnum; }Graph; void creatGraph(Graph *G) { scanf("%d %d", &G->vexnum, &G->arcsnum); for (int i = 0; i < G->vexnum; i++) { for (int j = 0; j < G->vexnum; j++) { G->arcs[i][j] =1000; } } for (int k = 0; k < G->arcsnum; k++) { int a, b, c = 0; scanf("%d %d %d", &a, &b, &c); G->arcs[a-1][b-1] = c; } } void Dijkstra(Graph *G,int v0) { int* dist = (int*)malloc(sizeof(int) * G->vexnum); int* path= (int*)malloc(sizeof(int) * G->vexnum); int* flag= (int*)malloc(sizeof(int) * G->vexnum); for (int i = 0; i < G->vexnum; i++) { flag[i] = 0; } for (int i = 0; i < G->vexnum; i++) { dist[i] = G->arcs[v0][i]; if (G->arcs[v0][i]<1000) { path[i] = v0; } else { path[i] = -1; } dist[v0] = 0; path[v0] = -1; flag[v0] = 1; int min = 1000; int pos = 0; for (int i = 0; i < G->vexnum; i++) { for (int j=0; j < G->vexnum; j++) { if (dist[j]<min) { min = dist[j]; pos = j; } } flag[pos] = 1; for (int i = 0; i < G->vexnum; i++) { if (flag[i] == 0 && dist[pos]+G->arcs[pos][i]<dist[i]) { dist[i] = dist[pos] + G->arcs[pos][i]; path[i] = pos; } } } } }
好了,我们下回见,peace