#include
#include
using namespace std;
void extend_shortest_paths(int **matrix,int **W,int **result,int n)//计算最短路径
{
for(int i=0;i::max();//保存最小值
for(int k=0;k::max() && W[k][j]!=numeric_limits::max()){
if(min>matrix[i][k]+W[k][j]){
min=matrix[i][k]+W[k][j];
}
}
}
result[i][j]=min;
}
}
}
int ** faster_all_pairs_shortest_paths(int **matrix,int n)//重复平方技术计算所有结点对的最短路径
{
int **result=new int *[n];
for(int i=0;i::max() && k!=j){//判断在原始矩阵中结点k到结点j是否连通
if(result[i][j]==result[i][k]+result[k][j]){
pre_matrix[i][j]=k;
}
}
}
}
}
}
return pre_matrix;
}
void print_short_paths(int **pre_matrix,int i,int j)
{
if(i!=j){
print_short_paths(pre_matrix,i,pre_matrix[i][j]);
cout<::max()){
print_short_paths(pre_matrix,i,j);
cout<::max();//最大值
int matrix[5][5]={0,3,8,max,-4,//邻接矩阵表示图
max,0,max,1,7,
max,4,0,max,max,
2,max,-5,0,max,
max,max,max,6,0};
//int matrix[6][6]={0,max,max,max,-1,max,//邻接矩阵表示图
// 1,0,max,2,max,max,
// max,2,0,max,max,-8,
// -4,max,max,0,3,max,
// max,7,max,max,0,max,
// max,5,10,max,max,0};
int n=5;
int **mat=new int *[n];
for(int i=0;i