#include <iostream>
#include <cstring>
#include <iomanip>
using namespace std;
template <class T>
class MGraph
{
public:
int arc[30][30];
int vexnum;
int arcnum;
T *vertex;
MGraph(T a[],int n,int e)
{
vexnum=n;
arcnum=e;
vertex=new T[n];
for(int i=0;i<vexnum;i++)
vertex[i]=a[i];
for(int i=0;i<vexnum;i++)
for(int j=0;j<vexnum;j++)
{
arc[i][j]=32767;
}
for(int i=0;i<vexnum;i++)
arc[i][i]=0;
int i,j,w;
for(int k=0;k<arcnum;k++)
{
cin>>i>>j>>w;
arc[i][j]=w;
}
}
virtual ~MGraph()
{
delete[] vertex;
}
};
template<class T>
void floyd(MGraph<T> a1)
{
int dist[100][100];
string path[100][100];
for(int i=0;i<a1.vexnum;i++)
for(int j=0;j<a1.vexnum;j++)
{
dist[i][j]=a1.arc[i][j];
if(dist[i][j]!=32767)
path[i][j]=a1.vertex[i]+a1.vertex[j];
else
path[i][j]="#";
}
for(int k=0; k<a1.vexnum; k++)
for(int i=0; i<a1.vexnum; i++)
for(int j=0; j<a1.vexnum; j++)
if((dist[i][k]+dist[k][j]<dist[i][j]))
{
dist[i][j]=dist[i][k]+dist[k][j];
path[i][j]=path[i][k]+path[k][j].substr(1);
}
for(int i=0;i<a1.vexnum;i++)
{
for(int j=0;j<a1.vexnum;j++)
{
if(dist[i][j]==32767)
cout<<left<<setw(4)<<"∞"<<" ";
else
cout<<left<<setw(4)<<dist[i][j]<<" ";
}
cout<<endl;
}
for(int i=0;i<a1.vexnum;i++)
{
for(int j=0;j<a1.vexnum;j++)
cout<<left<<setw(5)<<path[i][j]<<" ";
cout<<endl;
}
cout<<endl;
}
int main()
{
string a[5]={"A","B","C","D","E"};
MGraph<string> a1(a,5,10);
floyd(a1);
return 0;
}
c++最短路径,
最新推荐文章于 2022-12-08 13:36:56 发布