最短路径之folyd算法
来源:互联网 发布:dns 端口号 编辑:程序博客网 时间:2024/05/18 17:26
Floyd算法
floyd算法采用的是(松弛技术),对在i和j之间的所有其他点进行一次松弛。
If D[i,j]>D[i,k]+D[k,j] Then
D[I,j]:=D[I,k]+D[k,j];
时间复杂度:为O(n^3);
算法描述:
a) 初始化:D[u,v]=A[u,v]
b) For k:=1 to n
For i:=1 to n
For j:=1 to n
If D[i,j]>D[i,k]+D[k,j] Then
D[I,j]:=D[I,k]+D[k,j];
c) 算法结束:D即为所有点对的最短路径矩阵
代码如下:
#include<iostream>#include<fstream>#include<stdlib.h>using namespace std;int graph[6][6];int path[6][6];#define INF 1000 void show()//显示graph[][]
{ for(int i=1;i<=6;i++) { for(int j=1;j<=6;j++) { cout<<graph[i][j]<<" "; }cout<<endl; } }int main(int argc, char* argv[]){//图的初始化 ifstream in("a.txt"); //文件中每行3个数 点i ,点 j,weight[i][j] int n ,i,j,k; in>>n;//有n条边 for( i=1;i<6;i++) { for(int j=1;j<6;j++) { if(i==j) { graph[i][j]=0; } else graph[i][j]=INF; } } for (k=0 ;k<n;k++) { in>>i>>j; in>>graph[i][j]; graph[j][i]=graph[i][j]; } ///floyd 图中点的编号1 ~5 for( i=1;i<6;i++) { for(int j=1;j<6;j++) { for(int k=1;k<6;k++) { if((i!=j)&&(i!=k)&&(j!=k))//保证遍历的点 不是ij本身 { if(graph[i][k]+graph[k][j]<graph[i][j]) { graph[i][j]=graph[i][k]+graph[k][j]; }} } } } show();system("PAUSE");return 0;}
其实这个算法很挫,很简单,算法效率也比较搓,但是可以找出正权图中每两个点之间的最短路径。
代码贴完了 求挑错,求打脸!
- 最短路径之folyd算法
- hdu1869六度分离(最短路径基础--Folyd)
- 最短路算法之Folyd算法
- 最短路径算法之SPFA算法
- 图算法之最短路径算法
- 最短路径之Dijkstra算法
- 最短路径之 BellmanFord算法
- 最短路径之SPFA算法
- 最短路径 之 SPFA算法
- 最短路径之Dijkstra+Floyd算法
- 【转载】最短路径之SPFA算法
- 最短路径 之 SPFA算法
- 三、最短路径之Dijkstra算法
- 最短路径之 BellmanFord算法
- 最短路径之spfa算法
- 最短路径 之 Dijkstra算法
- 最短路径之Floyd算法
- 最短路径之Spfa算法
- 一般情况下的数据存储顺序
- cascade
- c++11 线程:让你的多线程任务更轻松
- 注册表学习——基本知识整理二
- 算法之归并排序算法(merge sort)
- 最短路径之folyd算法
- 软件项目管理系统-经费报销-招待费
- install.sh如何执行
- 手动配置SSH框架
- ViewPager获取当前显示(焦点)子view
- VS代码度量介绍
- Prediction: By 2013, Html5 Will Rule Enterprise Mobility.
- android开发
- 递归求解kitty猫的基因编码