邻接矩阵计算节点对最短路径

#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
邻接矩阵计算节点对最短路径_第1张图片

你可能感兴趣的:(算法导论)