C语言实现最短路径

2025-10-26 22:19:48

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,MAX_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语言实现最短路径

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢