求基于人工智能的旅行预算问题的 求解算法思路! 100分!!!!

zhouysh 2005-06-04 03:55:38
跟我在网上看到的旅行商问题不太一样, 求解思路 ,题目如下:
题目要求用回朔, 希望大家给一个算法思路!!!!!

一、题目简述
一个美国旅行代理商经常要求去估计开车从一城市旅行至另一城市的最小费用。他有一个在通常路线上的大多数加油站的列表。列表包括了所有加油站的位置及当前每加仑汽油的价格。
为了简化估计费用的过程,代理商使用了以下的简化汽车驾驶员行为的规则:
(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类,让其自动完成整个搜索过程。然后从哈希表中求出路费最少者,把路费和走过的路线打印出来。

...全文
258 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhouysh 2005-06-13
  • 打赏
  • 举报
回复
ft..........有向图忘光了 ````>_<~~~~~
cuiyuting 2005-06-10
  • 打赏
  • 举报
回复
(2)和(5)决定了这个是个典型的最短路径问题

用带权有向图表示的话,一点与另外一点有路径就是说两点之间油耗在油箱容量的[0.5,1]之间(条件1和条件4),该路径的权重就是油耗*目标点的汽油费+2,所有到达目标城市的路径权重均为0。

另外说一下,楼主那个解决方案大概是滥用OO的典型了,不是什么都适合用OO的(顺便BS一下很容易造成这个结果的Java:B)
zhouysh 2005-06-10
  • 打赏
  • 举报
回复
..........
zhouysh 2005-06-08
  • 打赏
  • 举报
回复
给个思路?
mathe 2005-06-07
  • 打赏
  • 举报
回复
典型的动态规划题目
hillMover 2005-06-06
  • 打赏
  • 举报
回复
mark!
zhouysh 2005-06-06
  • 打赏
  • 举报
回复
能给点具体思路吗?
zhouysh 2005-06-06
  • 打赏
  • 举报
回复
没有人吗??
hanweizhouricher 2005-06-05
  • 打赏
  • 举报
回复
mark
Zephyrzzz 2005-06-04
  • 打赏
  • 举报
回复
哦,油箱容量是实数啊,是要搜,分枝定界吧.
Zephyrzzz 2005-06-04
  • 打赏
  • 举报
回复
可以用dp来做的呀,何必搜索呢?
zhouysh 2005-06-04
  • 打赏
  • 举报
回复
没人在吗?
zhouysh 2005-06-04
  • 打赏
  • 举报
回复
求思路!!!!!
怎么样用回朔 来解???
基础篇 1、 算法有哪些特点?它有哪些特征?它和程序的主要区别是什么? 2、 算法的时间复杂度指的是什么?如何表示? 3、 算法的空间复杂度指的是什么?如何表示? 4、 什么是最坏时间复杂性?什么是最好时间复杂性? 5、 什么是递归算法?什么是递归函数? 6、 治法的设计思想是什么? 7、 动态规划基本步骤是什么? 8、 回溯法与枝限界法之间的相同点是什么?不同之处在哪些方面? 9、 枝限界法的基本思想是什么? 10、 限界函数的功能是什么? 11、 设某一函数定义如下: 编写一个递归函数计算给定x的M(x)的值。 12、 已知一个顺序表中的元素按元素值非递减有序排列,编写一个函数删除表中多余的值相同的元素。 13、 别写出二叉树结点总数及叶子总数的算法治术 14、 有金币15枚,已知其中有一枚是假的,而且它的重量比真币轻。要用一个天平将假的金币找出来,试设计一种算法(方案),使在最坏情况下用天平的次数最少。 15、 利用治策略,在n个不同元素中找出第k个最小元素。 16、 设有n个运动员要进行网球循环赛。设计一个满足以下要的比赛日程表。 (1)每个选手必须与其它n-1选手各赛一次; (2)每个选手一天只能赛一次。 17、 已知序列{503,87,512,61,908,170,897,275,652,462},写一个自底向上的归并算法对该序列作升序排序,写出算法中每一次归并执行的结果。 贪心法 18、 设有n个文件f1,f2,…,fn要存放在一个磁盘上,每个文件占磁盘上1个磁道。这n个文件的检索概率别是p1,p2,…,pn,且 =1。磁头从当前磁道移到被检索信息磁道所需的时间可用这两个磁道之间的径向距离来度量。如果文件fi存放在第i道上,1≤i≤n则检索这n个文件的期望时间是 。其中d(i,j)是第i道与第j道之间的径向距离。磁盘文件的最优存储问题确定这n个文件在磁盘上的存储位置,使期望检索时间达到最小。试设计一个解此问题算法,并算法的正确性与计算复杂性。 19、 设有n个正整数,编写一个算法将他们连接成一排,组成一个最大的多位整数。用贪心法本题。 20、 键盘输入一个高精度的正整数N(此整数中没有‘0’),去掉其中任意S个数字后剩下的数字按原左右次序将组成一个新的正整数。编程对给定的N和S,寻找一种方案使得剩下的数字组成的新数最小(输出应包括所去掉的数字的位置和组成的新的正整数,N不超过240位)。 21、 对于下图给出的有向网,写出用Dijkstra方法从顶点A到图中其它顶点的最短路径的算法,并写出执行算法过程中顶点的次序及从顶点A到各顶点路径的长度。 22、 对于上图给出的有向图,写出最小成本生成树,给出算法。 动态规划 23、 出上图中每对结点间的最短距离的算法,并给出计算结果。 24、 下图中给出了一个地图,地图中每个顶点代表一个城市,两个城市间的连线代表道路,连线上的数值代表道路的长度。现在,想从城市A到达城市E,怎样走路程最短,最短路程的长度是多少? 25、 已知序列a1,a2,…,an,试设计一算法,从中找出一子序列 ai1 < ai2 < … E。试用动态规划的最优化原理出A->E的最省费用。 29、 已知如下图,写出用动态规划最短路径的递推关系式,并写出从源点A0到终点A3 的最短路径过程。给出算法。 6 A1 A2 5 5 2 A0 A3 3 4 4 B1 B2 5 搜索与遍历问题 30、 已知有向图G=,试设计一算法以判断对于任意两点u和v,是否存在一条从u到v的路径,并析其复杂度。 31、 对于给定的一个二叉树T(如下图) a) 设计一个算法,统计二叉树中结点总数; b) 设计一个算法二叉树最大宽度及最大宽度所在深度。 32、 判近亲问题。给定一个家族族谱,为简化问题起见,假设家族中的夫妻关系只表示男性成员。设用线性表存储家族成员,用成员的父指针指向其生父。编写一个在此种族谱表示方式下的算法,判断给定的二个家族成员是否是五代内的近亲。(提示:家族成员的表示方式应与搜索方式相适应。) 33、 完全二叉树定义为:深度为K,具有N个结点的二叉树的每个结点都与深度为K的满二叉树中编号从1至N的结点一一对应。(1)写一个建立二叉树的算法。(2)写一个判别给定的二叉树是否是完全二叉树的算法。 34、 编写计算整个二叉树高度的算法(二叉树的高度也叫二叉树的深度)。 35、 编写计算二叉树最大宽度的算法(二叉树的最大宽度是指二叉树所有层中结点个数的最大值)。 回溯法 36、 (组合问题出从自然数1,2,…,n中任取r个数的所有组合。 37、 传教士与野人渡河问题。有M个传教士和M个野人准备渡河,船一次最多载2人,任何时刻野人数不能多于传教士数,但允许全部为野人。编写算法给出合理的渡河计划。 38、 某乡有n个村庄,有一个售货员,他要到各个村庄去售货,各村庄之间的路程s是已知的,且A村到B村与B村到A村的路大多不同。为了提高效率,他从商店出发到每个村庄一次,然后返回商店所在的村,假设商店所在的村庄为1。试设计一个算法,帮他选择一条最短的路。 39、 设某一机器由n个部件组成,每一种部件都可以从m个不同的供应商处购得。设wi,j是从供应商j处购得的部件i的重量,ci,j是相应的价格。试设计一个算法,给出总价格不超过c的最小重量机器设计。 40、 设有n件工作配给n个人。为第i个人配工作j所需的费用为ci,j 。试设计一个算法,计算最佳工作配方案,为每一个人都配1 件不同的工作,并使总费用达到最小。 41、 编写程序骑士巡游问题:在n行n列的棋盘上(如n=8),假设一位骑士(按象棋中“马走日”的行走法)从初始坐标位置(x1,y1)出发,要遍访(巡游)棋盘中的每一个位置一次。请编一个程序,为骑士巡游“路线图”(或告诉骑士,从某位置出发时,无法遍访整个棋盘 — 问题无解骑士巡游)。

33,010

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧