第十三周项目4每对顶点之间的最短路径

来源:互联网 发布:浙江诸暨淘宝司法拍卖 编辑:程序博客网 时间:2024/05/24 04:54
  1. /* 
  2. Copyright (c)2016,烟台大学计算机与控制工程学院 
  3. All rights reserved. 
  4. 文件名称:图(2).cpp 
  5. 作    者:  陈朋 
  6. 完成日期:2016年12月2日 
  7. 版 本 号:v1.0 
  8. 问题描述: 
  9. 输入描述:无 
  10. 程序输出:若干 
  11. */  
  12. #include <stdio.h>  
  13. #include <malloc.h>  
  14. #include "graph.h"  
  15. #define MaxSize 100  
  16. void Ppath(int path[][MAXV],int i,int j)  //前向递归查找路径上的顶点  
  17. {  
  18.     int k;  
  19.     k=path[i][j];  
  20.     if (k==-1) return;  //找到了起点则返回  
  21.     Ppath(path,i,k);    //找顶点i的前一个顶点k  
  22.     printf("%d,",k);  
  23.     Ppath(path,k,j);    //找顶点k的前一个顶点j  
  24. }  
  25. void Dispath(int A[][MAXV],int path[][MAXV],int n)  
  26. {  
  27.     int i,j;  
  28.     for (i=0; i<n; i++)  
  29.         for (j=0; j<n; j++)  
  30.         {  
  31.             if (A[i][j]==INF)  
  32.             {  
  33.                 if (i!=j)  
  34.                     printf("从%d到%d没有路径\n",i,j);  
  35.             }  
  36.             else  
  37.             {  
  38.                 printf("  从%d到%d=>路径长度:%d 路径:",i,j,A[i][j]);  
  39.                 printf("%d,",i);    //输出路径上的起点  
  40.                 Ppath(path,i,j);    //输出路径上的中间点  
  41.                 printf("%d\n",j);   //输出路径上的终点  
  42.             }  
  43.         }  
  44. }  
  45. void Floyd(MGraph g)  
  46. {  
  47.     int A[MAXV][MAXV],path[MAXV][MAXV];  
  48.     int i,j,k;  
  49.     for (i=0; i<g.n; i++)  
  50.         for (j=0; j<g.n; j++)  
  51.         {  
  52.             A[i][j]=g.edges[i][j];  
  53.             path[i][j]=-1;  
  54.         }  
  55.     for (k=0; k<g.n; k++)  
  56.     {  
  57.         for (i=0; i<g.n; i++)  
  58.             for (j=0; j<g.n; j++)  
  59.                 if (A[i][j]>A[i][k]+A[k][j])  
  60.                 {  
  61.                     A[i][j]=A[i][k]+A[k][j];  
  62.                     path[i][j]=k;  
  63.                 }  
  64.     }  
  65.     Dispath(A,path,g.n);   //输出最短路径  
  66. }  
  67. int main()  
  68. {  
  69.     MGraph g;  
  70.     int A[4][4]=  
  71.     {  
  72.         {0,  5,INF,7},  
  73.         {INF,0,  4,2},  
  74.         {3,  3,  0,2},  
  75.         {INF,INF,1,0}  
  76.     };  
  77.     ArrayToMat(A[0], 4, g);  
  78.     Floyd(g);  
  79.     return 0;  
  80. }  

0 0
原创粉丝点击