弗洛伊德算法

  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. }