#include<iostream>
using namespace std;
int dist[10][10];
int graph[10][10];
int path[10][10];
void createGraph(int n)
{
for(int i=0;i<n;i++){
int gleft,gright,weight;
cin>>gleft>>gright>>weight;
graph[gleft][gright]=weight;
graph[gright][gleft]=weight;
}
}
void Floyd(int n)
{
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
dist[i][j]=graph[i][j];
}
}
for(int k=0;k<n;k++){
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(dist[i][k]+dist[k][j]<dist[i][j]){
dist[i][j]=dist[i][k]+dist[k][j];
path[i][j]=k;
}
}
}
}
}
void printSolution(int startV,int endV)
{
if(startV==endV){
return ;
}
if(path[startV][endV]==-1){
cout<<"->"<<endV;
}else{
printSolution(startV,path[startV][endV]);
printSolution(path[startV][endV],endV);
}
}
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
graph[i][j]=1000000;
path[i][j]=-1;
}
}
int m;
cin>>m;
createGraph(m);
Floyd(n);
int start;
int end;
cin>>start>>end;
cout<<start;
printSolution(start,end);
cout<<endl;
cout<<"The weight between "<<start<<" and "<<end<<" is "<<dist[start][end];
}
Floyd算法
最新推荐文章于 2024-09-27 14:28:55 发布