手抄报 安全手抄报 手抄报内容 手抄报图片 英语手抄报 清明节手抄报 节约用水手抄报

C语言实现最短路径

时间:2024-10-13 06:15:25

1、首先打开VC++6.0

C语言实现最短路径

2、选择文件,新建

C语言实现最短路径

3、选择C++ source file 新建一个空白文档

C语言实现最短路径

4、声明头文件和定义常量#include<stdio.h>#include<stdlib.h>#define MAX_VEX_NUM 6#define MAX_INT 1024#define TRUE 1#define FALSE 0#define NOTHING -1

C语言实现最短路径

5、定义数组以及用到的函数int arcs[MAX_VEX娄多骋能_NUM][MAX_VEX_NUM] = {{MAX_INT,MAX_INT,10,MAX_INT,30,100},{MAX_INT,MA淌捌釜集X_INT,5,MAX_INT,MAX_INT,MAX_INT},{MAX_INT,MAX_INT,MAX_INT,50,MAX_INT,MAX_INT},{MAX_INT,MAX_INT,MAX_INT,MAX_INT,MAX_INT,10},{MAX_INT,MAX_INT,MAX_INT,20,MAX_INT,60},{MAX_INT,MAX_INT,MAX_INT,MAX_INT,MAX_INT,MAX_INT}};int D[MAX_VEX_NUM] = {0,0,0,0,0,0};int final[MAX_VEX_NUM] = {0,0,0,0,0,0};int previous[MAX_VEX_NUM] = {-1,-1,-1,-1,-1,-1};

C语言实现最短路径

6、该函数是寻找字斤谯噌最短的距离void ShortestPath(){ int i, j, min, v; /*初始化*/ for(足毂忍珩i = 0;i<MAX_VEX_NUM;i++) { D[i] = arcs[0][i]; final[i] = FALSE; previous[i] = NOTHING; } D[0] = 0; final[0] = TRUE; /* 初始化v0顶点属于S集 */ for(i =1;i<MAX_VEX_NUM ;i++) /*进行MAX_VEX_NUM -1 次循环*/ { min = MAX_INT; /* 当前所知据v0的最短距离 */ for(j = 0;j<MAX_VEX_NUM;j++) { if(final[j]==FALSE) { if(min > D[j]) { min = D[j]; v = j; } } } final[v] = TRUE; D[0] = 0; if(i==1) { previous[v] = 0; } for(j = 0;j<MAX_VEX_NUM;j++) { if(!final[j])/* 第j个顶点在V-S中 */ { if(D[j] > (arcs[v][j] + min)) { D[j] = arcs[v][j] + min;/*修改 D[j]*/ previous[j] = v; } else { if(arcs[0][j] != MAX_INT) previous[j] = 0; } } } }}

C语言实现最短路径

7、输出函数void PrintPath(int k){ if(previous[k] == -1) { printf("\nthere is path!!\n"); } else { if(previous[k] == 0) printf("\n0 -> %d ",k); else { PrintPath(previous[k]); printf(" -> %d ",k); } }}

C语言实现最短路径

8、主函数int main(){ int i; ShortestPath(); for(i=1;i<MAX_VEX_NUM;i++) { printf("the shortest path from v[0] to v[%d] is:",i); PrintPath(i); if(D[i] != MAX_INT) printf("::[%d]\n",D[i]); } getch(); return 0;}

C语言实现最短路径

9、执行结果

C语言实现最短路径
© 手抄报圈