Floyd算法【代码】

数据来源:b站up主

a784babbd8184d2698e893f80c394306.png

 视频:最短路径(三)Flodyd算法_哔哩哔哩_bilibili

#include <iostream>
using namespace std;
#define INF 0x3f3f3f3f

int edge[6][6] = { 0 };
int pre[6][6] = { 0 };
void flodyd(int k) {
	for (int node = 1; node <= k; node++) {
		for (int i = 1; i <= 5; i++) {
			for (int j = 1; j <= 5; j++) {
				if (i == node || j == node) continue;
				if (i == j) continue;
				if (edge[i][node] + edge[node][j] < edge[i][j]) {
					edge[i][j] = edge[i][node] + edge[node][j];
					pre[i][j] = node;
				}
			}
		}
	}
	return;
}
void output(int arr[][6], int k) {
	for (int i = 1; i <= k; i++) {
		for (int j = 1; j <= k; j++) {
			if (arr[i][j] == INF) cout << "~~" << " ";//~~代表无穷大
			else printf("%2d ", arr[i][j]);
		}
		cout << endl;
	}
	return;
}
int main() {

	for (int i = 1; i <= 5; i++) {
		for (int j = 1; j <= 5; j++) {
			edge[i][j] = INF;
			if (i == j) edge[i][j] = 0;
		}
	}
	{
		edge[1][2] = 10;
		edge[2][3] = 50;
		edge[3][5] = 10;
		edge[1][4] = 30;
		edge[1][5] = 100;
		edge[4][5] = 60;
		edge[4][3] = 20;
	}

	flodyd(5);

	cout << "edge[][]:" << endl;
	output(edge, 5);
	printf("\n\n");
	cout << "pre[][]:" << endl;
	output(pre, 5);
	return 0;
}

19093daf3499424b8bfe2fedaa58a467.png

 可以看到输出和视频中的一样

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云儿乱飘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值