pat最短路径-dj

最短路径

1003. Emergency (25)-PAT甲级真题(Dijkstra算法)
1018. Public Bike Management (30)-PAT甲级真题(Dijkstra + DFS)
1030. Travel Plan (30)-PAT甲级真题(Dijkstra + DFS,输出路径,边权)
1072. Gas Station (30)-PAT甲级真题(Dijkstra)
1087. All Roads Lead to Rome (30)-PAT甲级真题-Dijkstra + DFS
1111. Online Map (30)-PAT甲级真题(Dijkstra + DFS)

分析

难度:

1018>1087>1072>1111>1030>1003

P1003

	题目大意: 给你N个城市m条路, 起点和终点。每个城市的救援人手,路的
	长度。
	问:从起点到终点的最短路径条数
	最短路径上的救援小组数目之和。
	如果有多条就输出点权(城市救援小组数目)最大的那个~
	简单题

P1018

	题目大意:	每个自行车车站的最大容量为一个偶数cmax,如果一个车站里面
自行车的数量恰好为cmax / 2,那么称处于完美状态。如果一个车站容量是满的
或空的,控制中心(处于结点0处)就会携带或者从路上收集一定数量的自行
车前往该车站,一路上会让所有的车站沿途都达到完美。现在给出cmax,车
站的数	量n,可以走的边。
	
	问:	问题车站sp,m条边,还有距离,求最短路径。如果最短路径有多个,
求能带的最少的自行车数目的那条。如果还是有很多条不同的路,那么
就找一个从车站带回的自行车数目最少的(带回的时候是不调整的)~
	
	分析:Dijkstra + DFS。如果只有Dijkstra是不可以的,因为minNeed和minBack
	路径上的传递不满足最优子结构,不是简单的相加的过程,只有在所有路径都确定了后	才能区选择最小的need和最小的back~Dijkstra求最短路径,dfs求minNeed和
minBack和path,dfs的时候模拟一遍需要调整的过程,求出最后得到的need和back,
	与minNeed和minBack比较然后根据情况更新path,最后输出minNeed path 和 
	minBack,记得path是从最后一个结点一直到第一个结点的,所以要倒着输出~
	(摘自柳神博客)注:自行车是去程调整,回程不可以。
	
		个人觉得这是pat上最短路径出的最好的一道题。非常有灵性。
		难题,坑题。

P1030

	题目大意:给你一张城市地图,起点和终点。
	问:求起点到终点的最短路径最短距离和花费,要求首先路径最短,其次花费最少,要输出完整路径
	分析: 输出的相对1003多了路径,其他没什么。
	简单题

P1072

		题目大意:给你一张n1个可能新建的加油站和n2个住所的图。以及存在的边
		的距离。和覆盖范围。
		问:从m个加油站里面选取1个站点,让他离居民区的最近的人最远,
		并且没有超出服务范围ds之内。如果有很多个最远的加油站,输出距离
		所有居民区距离平均值最小的那个。如果平均值还是一样,就输出按照
		顺序排列加油站编号最小的那个。
		分析:		1,结点是字符串。
					2, 由于加油站最多10个,想到10次dijstra。
					3, 保留1位小数, (int)(a*10.0++0.5)/10.0
					4, 	10次比较,要初始化。
					5,其他倒没什么。

		中等。

P1087

	题目大意:	给你N个城市,M条边。起点。让你去名为Rome的城市。每个城市
	有一个点权[快乐值]

	问:求 从起点出发到Rome的最短路径。如果最短路径有多条,那么找到获得
快乐值最大的路径。如果这样的路径还有多条,那么找平均快乐值最大的路径。
并输出有关值。

分析:		1,节点是字符串。
				2, 平均快乐值不满足最优子结构。

难度:中等

p1111

题目大意: 给你一张城市地图,每个边有距离和走的时间值。给你起点和终点

问: 1,找到最短路径,如果有多条,那么找耗时最短的,此条是唯一的。
		2,找到耗时最短路径,如果有多条,那么找经过节点最少的,此条是唯一的。

分析: 实质就是写两个dijkstra函数。

简单

小结

pat上最短路径的题目, 一共6道。尽管思维量大但可以套板子。
书上的最短路径习题是最简单和最基础的。pat上的题目既要考察基础,也要适当拔高。就好比数学上中值定理题目,你连拉格朗日的公式都不会背,难道还说自己会
做这类题目。编程也是一样。最短路径虽然不像贪心和动态规划那样灵活需要
多做题,但是一定要记住那张最基础的板子,板子实际上就是相当于公式。
pat要拔高最短路径难度可以做的手脚:
	1,输入的结点不是数字,而是字符串。或者结点编号不连续。
	2,多把尺子,可以是点权,边权。如长度,花费,路径上结点个数,物资。
	3,打印路径。最短路径个数
	4,有些最优指标可能不满足最优子结构。如平均花费值。这个时候要先用pre存。
	之后,DFS找最优路径。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值