floyed完整算法:
#include <iostream>
using namespace std;
class floyed
{
private:
int vernum;
int path[7][7];
int dist[7][7];
public:
floyed(int vernum,int matrix[7][7])
{
this->vernum=vernum;
for(int i=0;i<vernum;i++)
{
for(int k=0;k<vernum;k++)
{
dist[i][k]=matrix[i][k];
}
}
for(int i=0;i<vernum;i++)
{
for(int k=0;k<vernum;k++)
{
path[i][k]=i;
}
}
}
~floyed(){}
void Build()
{
for(int n=0;n<vernum;n++)
{
for(int i=0;i<vernum;i++)
{
for(int k=0;k<vernum;k++)
{
if(dist[i][k]>dist[i][n]+dist[n][k])
{
dist[i][k]=dist[i][n]+dist[n][k];
path[i][k]=path[n][k];
}
}
}
}
}
{
private:
int vernum;
int path[7][7];
int dist[7][7];
public:
floyed(int vernum,int matrix[7][7])
{
this->vernum=vernum;
for(int i=0;i<vernum;i++)
{
for(int k=0;k<vernum;k++)
{
dist[i][k]=matrix[i][k];
}
}
for(int i=0;i<vernum;i++)
{
for(int k=0;k<vernum;k++)
{
path[i][k]=i;
}
}
}
~floyed(){}
void Build()
{
for(int n=0;n<vernum;n++)
{
for(int i=0;i<vernum;i++)
{
for(int k=0;k<vernum;k++)
{
if(dist[i][k]>dist[i][n]+dist[n][k])
{
dist[i][k]=dist[i][n]+dist[n][k];
path[i][k]=path[n][k];
}
}
}
}
}
void print()
{
for(int i=0;i<vernum;i++)
{
for(int k=0;k<vernum;k++)
{
cout<<i<<"->"<<k<<":"<<dist[i][k]<<" ";
cout<<"路径为:"<<i;
int j;
j=k;
int a[vernum]={0};
int l=0;
while(path[i][j]!=i)
{
a[l++]=path[i][j];
j=path[i][j];
}
for(int i=l-1;i>=0;i--)
{
cout<<a[i];
}
cout<<k<<endl;
}
}
cout<<endl;
for(int i=0;i<vernum;i++)
{
for(int k=0;k<vernum;k++)
{
cout<<path[i][k]<<" ";
}
cout<<endl;
}
}
};
int main()
{
int vernum=7;
//int vertex[7]={0,1,2,3,4,5,6};
int matrix[7][7]={0,12,1000,1000,1000,16,14,
12,0,10,1000,1000,7,1000,
1000,10,0,3,5,6,1000,
1000,1000,3,0,4,1000,1000,
1000,1000,5,4,0,2,8,
16,7,6,1000,2,0,9,
14,1000,1000,1000,8,9,0};
floyed pro(vernum,matrix);
pro.Build();
pro.print();
return 0;
}
{
for(int i=0;i<vernum;i++)
{
for(int k=0;k<vernum;k++)
{
cout<<i<<"->"<<k<<":"<<dist[i][k]<<" ";
cout<<"路径为:"<<i;
int j;
j=k;
int a[vernum]={0};
int l=0;
while(path[i][j]!=i)
{
a[l++]=path[i][j];
j=path[i][j];
}
for(int i=l-1;i>=0;i--)
{
cout<<a[i];
}
cout<<k<<endl;
}
}
cout<<endl;
for(int i=0;i<vernum;i++)
{
for(int k=0;k<vernum;k++)
{
cout<<path[i][k]<<" ";
}
cout<<endl;
}
}
};
int main()
{
int vernum=7;
//int vertex[7]={0,1,2,3,4,5,6};
int matrix[7][7]={0,12,1000,1000,1000,16,14,
12,0,10,1000,1000,7,1000,
1000,10,0,3,5,6,1000,
1000,1000,3,0,4,1000,1000,
1000,1000,5,4,0,2,8,
16,7,6,1000,2,0,9,
14,1000,1000,1000,8,9,0};
floyed pro(vernum,matrix);
pro.Build();
pro.print();
return 0;
}