PAT Gas Station 寻找最大的最小Dijkstra距离

题意:N个居民房,M个加油站待建点,k条无向边。从M个加油站中选一个,使该加油站距离最近的居民房尽可能远,且必须保证所有房子与该加油站的距离都不超过给定的服务范围DS。如果有多个最近距离相同的解,选择平均距离最小的,如果平均距离相同,选择编号最小的。

分析:

1.输入可能是整数或者是Gn,所以要用字符串读入,根据首字符是否为‘G’判断如何处理编号。居民房1~N,加油站N+1~N+M。

2.最短距离可以经过加油站,故Dijkstra算法顶点编号范围1~N+M。

3.遍历每个加油站,得到一个d数组,寻找其中最小的值与平均距离。所有加油站中,第一标尺的最短距离,第二标尺是平均距离,由于是从小到大遍历加油站,第三标尺编号可以不考虑。

4.在Dijkstra算法中寻找最小值,计算平均距离(保存在全局变量中),若有一个居民房距离大于服务范围DS,返回-3。主函数中获得的返回值为-3时,continue,跳过接下来的比较步骤。

#include<iostream>
#include<stdio.h>
#include<vector>
#include<algorithm>
#pragma warning(disable:4996)
using namespace std;
const int maxn = 1010;
const int INF = 100000;

struct Node {
	int id;
	int dis;
};
vector<Node>Adj[maxn];
int d[maxn]; //d[0]用于存储平均最短路径
bool mark[maxn]; //用于标记是否已加入最短距离顶点集合
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值