Floyd算法计算最短距离问题(c++)

算法思路:先用矩阵e[10][10]存储信息,其中e[i][j]表示i点到j点的距离。若是无法到达则设置为正无穷大。若是e[i][i]则表示e[i][i]=0。
用void memset(void buffer, int c, int count)对数组进行初始化。其中buffer是数组,c是每个元素的值,buffer的长度若c=0x3f3f3f3f,则表示正无穷大
先假设两点路程只经过0号顶点:
只需要判断e[i][j]>e[i][0]+e[0][j]是否成立,若成立则设置e[i][j]=e[i][0]+e[0][j]
其他点以此类推。

代码实现如下:

#include <iostream>
using namespace std;
int main()
{
	int e[10][10], n, m, t1, t2, t3;//t1是起点,t2是终点,t3是t1到t2的距离,n是顶点的个数,m是线段的个数
	memset(e, 0x3f3f3f3f, sizeof(e));//对e中的每个元素进行初始化
	cin >> n >> m;
	for (int i = 0; i < n; i++)//设置本身到本身的距离为0
	{
		for (int j = 0; j < n; j++)
		{
			if (i == j)//设置本身到本身的距离为0
				e[i][j] = 0;
		}
	}
	for (int i = 0; i < m; i++)//输入数据
	{
		cin >> t1 >> t2 >> t3;
		e[t1][t2] = t3;
	}
	for (int i = 0; i < n; i++)//Floyd算法主要内容
	{							//i代表两点路程只经过i点。
		for (int j = 0; j < n; j++)
		{
			for (int k = 0; k < n; k++)
			{
				if (e[j][k] > e[j][i] + e[i][k])//更新两点路程若经过i点时的数据
					e[j][k] = e[j][i] + e[i][k];
			}
		}
	}
}
for(int i=0;i<n;i++)
{
	for(int j=0;j<nj++)
	{
		cout<<e[i][j];//此时的e中每个元素都是两点之间最短的距离
	}
}
return 0;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值