从一堆可能的路径中找出权重最小的路径

时间:2012-01-22 19:24:30

标签: algorithm graph-algorithm

我需要一些关于作业问题的帮助/指示。如果有人能指出我如何解决这个问题,我真的很感激。)

分配

  “一只名叫莫的愤怒的小鸟正在飞行一段漫长的旅程来报复   在猪身上。为了节省战斗的能量,这只鸟将采取   喷射流的优势将降低他的飞行能量   消费。在飞行之前,BirdHQ给了鸟一个输入文件   格式如下:

     
      
  1. 第一行只包含1个整数,这是在没有喷射流的情况下飞行1英里所需的恒定能量。
  2.   
  3. 每个后续行包含3个以空格分隔的整数:喷射流的起始英里标记,喷射的结束英里标记   流,最后是一个整数,表示所需的总能量   飞得那喷射流的距离。
  4.         

    例如,“3 7 12”线表示需要12个能量单位才能飞行   3英里到7英里之间的4英里。

         

    请注意,喷射流可以重叠,但鸟不能超过   一次喷射一股喷射流,它不会飞出局部喷射流。

         

    为简单起见,请考虑最远喷射的最终英里标记   流程结束了。

         

    编写一个python程序,它接收一个输入文件“jetstreams.txt”   计划出Mo应该飞的最佳射流序列   在整个旅程中尽量减少他的能量消耗。所有   输入文件中的整数是非负数。作为输出,打印出来   最小总能量和表示喷射流的元组列表'   端点。

         

    例如,给定样本jetstreams.txt,最小总能量   需要飞行所有24英里是352能量单位,并且是最佳的   喷射流序列是[(0,5),(6,11),(14,17),(19,24)]。“

jetstreams.txt

50
0 5 10
1 3 5
3 7 12
6 11 20
14 17 8
19 24 14
21 22 2

这会像解决图表的最短路径吗?

3 个答案:

答案 0 :(得分:4)

你有一个“根本不使用喷射流”路径,它由编号为0,1,3,5,6,7,11,14,17,19,21,22,24的顶点组成。连接这些顶点中的每一个的边缘具有50 *距离的“权重” - 因此0-> 1边缘被加权50,1-> 3边缘被加权100等等。

然后,你有另外的边代表喷气流 - 一个来自0-> 5加权10,一个来自1-> 3加权5等等。

这些形成了有向无环图(DAG)。

现在你可以使用通常的图遍历技术来找到从顶点0到顶点24的“最便宜”的路线。

答案 1 :(得分:2)

是的,这是一个最短的路径问题,能量代替每条边的长度。在构建样本问题图时,从0到24的直线开始,每英里50个能量单位成本。然后绘制喷射流边缘及其能耗以完成图形。

答案 2 :(得分:1)

这可以很容易地表示为最小加权区间调度算法。 每个喷射流都是一个具有重量的区间,目标是选择最小化重量的区间。

请参阅以下链接了解最大加权间隔时间安排或google了解详情: 您可以针对您的问题将max计算结果替换为min

Algorithm to find the best combination of items under certain constraints

Weighted Interval Scheduling problem & Dynamic program