• 弗洛伊德算法

    弗洛伊德算法

    1. #include <stdio.h>
    2. #define MAXVEX 100
    3. #define INF 32767
    4. void Floyed(int cost[][MAXVEX],int n)
    5. {
    6. int A[MAXVEX][MAXVEX],path[MAXVEX][MAXVEX];
    7. int i,j,k,pre;
    8. for (i=0;i<n;i++) /*置初值*/
    9. for (j=0;j<n;j++)
    10. {
    11. A[i][j]=cost[i][j];
    12. path[i][j]=-1;
    13. }
    14. for (k=0;k<n;k++)
    15. {
    16. for (i=0;i<n;i++)
    17. for (j=0;j<n;j++)
    18. if (A[i][j]>(A[i][k]+A[k][j]))
    19. {
    20. A[i][j]=A[i][k]+A[k][j];
    21. path[i][j]=k;
    22. }
    23. }
    24. printf("\n Floyed算法求解如下:\n");
    25. for (i=0;i<n;i++) /*输出最短路径*/
    26. for (j=0;j<n;j++)
    27. if (i!=j)
    28. {
    29. printf(" %d->%d:",i,j);
    30. if (A[i][j]==INF)
    31. {
    32. if (i!=j)
    33. printf("不存在路径\n");
    34. }
    35. else
    36. {
    37. printf("路径长度为:%3d ",A[i][j]);
    38. printf("路径为%d ",i);
    39. pre=path[i][j];
    40. while (pre!=-1)
    41. {
    42. printf("%d ",pre);
    43. pre=path[pre][j];
    44. }
    45. printf("%d\n",j);
    46. }
    47. }
    48. }
    49. void main()
    50. {
    51. int cost[6][MAXVEX]={ /*图6.9的代价矩阵*/
    52. {0,50,10,INF,INF,INF},
    53. {INF,0,15,50,10,INF},
    54. {20,INF,0,15,INF,INF},
    55. {INF,20,INF,0,35,INF},
    56. {INF,INF,INF,30,0,INF},
    57. {INF,INF,INF,3,INF,0}};
    58. Floyed(cost,6);
    59. printf("\n");
    60. }