Floyd算法Cpp实现

来源:互联网 发布:lua调用java 编辑:程序博客网 时间:2024/05/21 03:18
#include<iostream>#define max 10using namespace std;int ret[4][4]={0};void set(int x,int y,int z){ret[x][y]=z;}void reset(){for(int i=0;i<4;i++)for(int k=0;k<4;k++)ret[i][k]=max;}void Folyd(){for(int k=0;k<4;k++)for(int i=0;i<4;i++)for(int j=0;j<4;j++)if((ret[i][k]+ret[k][j])<ret[i][j])ret[i][j]=ret[i][k]+ret[k][j];}int main(){reset();set(0,0,0);set(0,3,0);set(2,0,0);set(2,1,0);set(2,3,0);set(3,2,0);Folyd();//Folyd();for(int i=0;i<4;i++){for(int j=0;j<4;j++)cout<<ret[i][j]<<" ";cout<<endl;}}
同warshall一样,顺序很重要。三重循环DP时候把内层k提到最外面,一样避免扫不全
0 0