您的位置:首页 > 其它

Floyd算法求解所有顶点间的最短路径

2015-05-26 16:55 204 查看
•Floyd算法
–1. 引入数组D[N]
,其中D[i][j]表示从顶点i到顶点j的最短距离。
–2. 对于每一对顶点i和j,看是否存在顶点k使得通过k中转得到的D[i][j]更小。
 

#include <iostream>

using n
4000
amespace std;

const int MAX_INT = 1000000;

const int  M = 4;

int graph[M][M];

void floyd(int g[M][M],int D[M][M])

{

 for(int k = 0;k<M;k++) {

  for(int i = 0;i<M;i++) {

   for(int j = 0;j<M;j++) {

    if(k == 0) {

     D[i][j] =g[i][j];

    } else {

     D[i][j] = D[i][j] < (D[i][k]+D[k][j]) ? D[i][j] : (D[i][k]+D[k][j]);

    }

   }

  }

 }

}

void printgraph(int g[M][M],int v)

{

 for(int i = 0;i<v;i++) {

  for (int j = 0;j<v;j++) {

   if(g[i][j] == MAX_INT) {

    cout <<"*" << " ";

   } else {

    cout <<g[i][j ]<< " ";

   }

  }

  cout << endl;

 }

 cout << endl;

}

int main()

{

 int g[M][M]={{0,1,MAX_INT,MAX_INT},{MAX_INT,0,2,MAX_INT},{MAX_INT,MAX_INT,0,3},{4,MAX_INT,MAX_INT,0}};

 printgraph(g,M);

 floyd(g,graph);

 printgraph(graph,M);

 return 0;

}

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: