您的位置:首页 > 编程语言 > C语言/C++

多源最短路径Floyd算法邻接矩阵形式C++实现

2010-11-24 22:00 316 查看
多源最短路径Floyd算法邻接矩阵形式C++实现,输入点数、边数和起点、终点、权值,输出最短路径及权值

#include <iostream>
#define MAX_VEX 305
#define MAX_WEI 1000005
using namespace std;
int A[MAX_VEX][MAX_VEX],Path[MAX_VEX][MAX_VEX];
//输出最短路径
void  prn_pass(int j , int k){
	if (Path[j][k]!=-1)
	{
		prn_pass(j,Path[j][k]);
		cout<<"-->"<<Path[j][k];
		prn_pass(Path[j][k],k);
	}
}
int main(){
	int N,M,i,j,k;
	int s,e,w;
	cin>>N>>M;
	for (i = 0;i < N;i++)
		for (j = 0;j < N;j++)
		{
			if (i == j)
				A[i][j] = 0;
			else
				A[i][j] = MAX_WEI;
			Path[i][j] = -1;
		}
	for (i = 0; i < M;i++)
	{
		cin>>s>>e>>w;
		A[s][e] = w;
	}
	//关键代码部分
	for (k = 0;k < N;k++)
		for (i = 0;i < N;i++)
			for (j = 0;j < N;j++){
				if (A[i][k] + A[k][j] < A[i][j])
				{
					A[i][j] = A[i][k] + A[k][j];
					Path[i][j] = k;
				}
			}
		//输出最短路径和权值
	for (i = 0;i < N;i++)
		for (j = 0;j < N;j++){
			if (i!=j)
			{
				cout<<i<<"到"<<j<<"的最短路径为:";
				cout<<i;
				prn_pass(i,j);
				cout<<"-->"<<j<<endl;
				cout<<"最短路径长度为:"<<A[i][j]<<endl;
			}
		}
	return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: