AOJ 0189 Convenient Location 最短路 Floyd-Warshall算法

本文介绍了一种基于Floyd-Warshall算法的解决方案,用于找出办公室网络中,从一个办公室到其他所有办公室的总距离最短的办公室,以及其对应的最短距离。通过初始化路径矩阵,使用三重循环更新所有可能的路径,最后找到总距离最小的办公室。

题目大意:

求某一个办公室 到其他所有办公室的 总距离最短 办公室数不超过10(编号为0~9)
输入:多组输入,每组第一行为n (1 ≤ n ≤ 45),接下来n行是 (x, y, d),x到y的距离是d
输出:办公室号 和 总的最短距离

解题思路:
基础的Floyd-Warshall算法
AC代码:

#include<iostream>
#include<algorithm>
using namespace std;
int path[10][10];
#define INF 0x3fffffff
void init() {
	for (int i = 0; i < 10; i++) {
		for (int j = 0; j < 10; j++) {
			path[i][j] = -1;
		}
		path[i][i] = 0;
	}
}
int main() {
	int n;
	while (cin >> n&&n) {
		init();
		int a, b; int V=0;//V代表办公室数量
		for (int i = 0; i < n; i++) {
			cin >> a >> b; cin >> path[a][b];
			path[b][a] = path[a][b];
			V = max(V, max(a, b) + 1);//注意这里要手动求出办公室数量
		}
		for (int k = 0; k < V; k++) {
			for (int i = 0; i < V; i++) {
				for (int j = 0; j < V; j++) {
					if (path[i][k] == -1 || path[k][j] == -1) continue;
					if (path[i][j] == -1 || path[i][j] > path[i][k] + path[k][j]) {
						path[i][j] = path[i][k] + path[k][j];
					}
				}
			}
		}
		int ans = INF; int pos; int tmp;
		for (int i = 0; i < V; i++) {
			tmp = 0;
			for (int j = 0; j < V; j++) {
				tmp += path[i][j];
			}
			if (tmp < ans) {
				ans = tmp; pos = i;
			}
		}
		cout << pos << " " << ans << endl;
	}
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值