求基于人工智能的旅行预算问题的 求解算法思路! 100分!!!!
跟我在网上看到的旅行商问题不太一样, 求解思路 ,题目如下:
题目要求用回朔, 希望大家给一个算法思路!!!!!
一、题目简述
一个美国旅行代理商经常要求去估计开车从一城市旅行至另一城市的最小费用。他有一个在通常路线上的大多数加油站的列表。列表包括了所有加油站的位置及当前每加仑汽油的价格。
为了简化估计费用的过程,代理商使用了以下的简化汽车驾驶员行为的规则:
(1)除非汽车无法用油箱里的汽油达到下一个加油站(如果有的话)或目的地,在油箱里还有不少于最大容量一半的汽油时,驾驶员从不在加油站停下来。
(2)在每一个停下的加油站驾驶员总是将油箱加满。
(3)在一个加油站停下之后,驾驶员将为旅程在快餐和糖果上花去2.00元。
(4)在驶向加油站或目的地时,驾驶员不需要超过必需量的汽油。不需要“安全余量”。
(5)驾驶员开始旅行时油箱总是满的。
(6)在每个加油站付款时四舍五入到分(1元等于100分)。
1、输入
程序的输入将由若干个对应不同的旅程的数据项组成,每个数据项由若干信息行组成。开始的2行给出了出发地和目的地信息,数据项的后继行代表了路线上的加油站,每个加油站用一行表示。下面是输入数据中数据项的精确格式及其含义。
第一行:一个实数--从出发地到目的地的距离(英里)。
第二行:三个实数及一个整数。
(1)第一个实数是汽车油箱的最大的容量(加仑)。
(2)第二个实数是汽车每加仑汽油可以行驶的英里数。
(3)第三个实数是汽车在出发地城市加满油箱的费用(单位:元):
(4)整数(小于51)是路线上加油站的数目。
接下来的每一行:两个实数:
(1)第一个实数是从出发地到加油站的距离(单位:英里);
(2)第二个实数是该加油站出售的汽油每加仑的价格(单位:分)。
数据项中的所有数据都是正的。一条路线上的加油站根据其到出发地的距离递增排列。路线上不存在这样的加油站,它到出发地的距离大于从出发地到目的地的距离。每条路线上的加油站都被适当地安排以使得任何汽车都能够从出发地开到目的地。
输入数据中若某行为一个负数则表示输入数据结束。
2、输出
对于输出中的每个数据项,程序必须打印数据项编号以及一个给出了精确到分的汽油和食品的最小总费用。总费用必须包括开始时在出发地加满油箱的费用。
3、样例输入
256.3 147.9
275.0 102.9
277.6 112.9
381.8 100.9
516.3
15.7 22.1 20.87 3
125.4 125.9
297.9 112.9
345.2 99.9
-1
4、样例输出
Data Set #1
Minimum cost=$27.31
Data Set #2
Minimum cost=$38.09
二、解题思路
由于本人采用Java编程,而Java是一种纯粹的面向对象语言,因此思考本题时摒弃了传统的面向过程的编程方式,思维方式从习惯的流程图方式转向从对象的角度思考。
本程序的基本思想是使回朔和面向对象方法相结合,同时考虑到实际的需要,加入了旅行路线的记录,使得更加具有实际应用价值。
本人把程序分成三个类:
(1)Data类。存储基本的数据信息。例如油箱最大容量和路线总距离等。
(2)Driver类。从Data类中继承,并承担寻路的主要工作。它有两个构建器,第一个用于开始在出发地初始化,第二个用于搜索过程中启动新的Driver对象。它首先判断从当前所在地能否走完全程,若可以则把费用和走过的路线放入哈希表;否则根据题目要求进行判断,找出符合条件的加油站,向这些加油站各发出新Driver对象,继续进行搜索。
(3)Traver类。是程序运行的主类,它用来启动程序,从输入设备中读取数据。进行数据的初始化,并进行数据的合法性和有效性检验,之后启动Driver类,让其自动完成整个搜索过程。然后从哈希表中求出路费最少者,把路费和走过的路线打印出来。