Floyd+路径输出

#include  
using namespace std; 
#include 
const int INF = 99999999; 
stacks;
int n,m;//n:顶点数,m:边数 

struct node 
{ 
int space; 
int pre; 
}map[110][110];//建图,map[i][j].space表示点i到点j的最短距离,map[i][j].pre表示点i到点j的"跳板" 

void input() 
{ 
int i,j; 
for(i = 1; i <=n; i++) 
for(j = 1; j <=n; j++) 
{ 
if(i==j) map[i][j].space = 0; 
else map[i][j].space = INF; 
map[i][j].pre = i; 
}//初始化 
int a,b,x; 
for(i = 1; i <=m; i++) 
{ 
cin>>a>>b>>x; 
map[a][b].space = x; 
}//存图 
} 

void floyd()//floyd算法 
{ 
int k,i,j; 
for(k = 1; k <=n; k++) 
for(i = 1; i <=n; i++) 
for(j = 1; j <=n; j++) 
{ 
if(map[i][k].space!=INF && map[k][j].space!=INF && map[i][k].space + map[k][j].space < map[i][j].space) 
{ 
map[i][j].space = map[i][k].space + map[k][j].space; 
map[i][j].pre = k; 
} 
} 
} 

void output() 
{ 
int i,j; 
for(i = 1; i <=n; i++) 
for(j = 1; j <=n; j++) 
{ 
cout<>n>>m; 
if(n+m==0)break; 
input(); 
floyd(); 
output(); 
} 
return 0; 
}

你可能感兴趣的:(Floyd)