2

我刚参加了一个编程竞赛题,我绝对把它搞砸了。我一开始就在阅读输入集时遇到了麻烦。这个问题基本上是这个谜题http://codercharts.com/puzzle/evacuation-plan的一个变体,但在第一行也有一个小时部分(比如疏散开始后 3 小时)。它读起来像这样

这个谜题是向所有在日本地震中受难的人们致敬。这个谜题的目标是,给定一个道路和位置网络,确定可以疏散的最大人数。

人们必须从疏散点疏散到救援点。提供了道路列表和每小时可以载运的人数。

输入规范 你的程序必须接受一个且只有一个命令行参数:输入文件。输入文件的格式如下:第一行包含 4 个整数 nrstn 是位置的数量(每个位置由一个从 0 到 n-1 的数字给出) r 是道路的数量 s 是要疏散的位置的数量from (疏散点) t 是必须将人员疏散到 (救援点) 的位置的数量 第二行包含 s 个整数,给出疏散点的位置 第三行包含 t 个整数,给出救援点的位置 r 跟随行包含道路定义。每条道路由 3 个整数 l1 l2 宽度定义,其中 l1 和 l2 是道路连接的位置(道路是单向的),宽度是每小时可以容纳在道路上的人数

现在看看样本输入集

5 5 1 2 3

0

3 4

0 1 10

0 2 5

1 2 4

1 3 5

2 4 10

第一行中的 3 是附加组件,定义为自恢复开始以来的小时数,在本例中为 3。

现在我的解决方案是使用 Dijisktras 算法来找到每个救援和疏散节点之间的最短路径。现在我的问题从如何读取输入集开始。我阅读了python中的第一行并将值存储在变量中。但是后来我不知道如何存储节点之间的距离值以及使用什么 DS 以及如何输入它来表示 dijikstras 算法的标准实现。

所以我的问题是两个方面 1.) 我如何接受这些问题的输入?- 我最近在很多比赛中都遇到过这个问题,我希望我能得到一个简单的代码片段或java或python中的解释来读取数据输入集,这样我就可以将它作为图形输入到图形算法中像 dijikstra 和 floyd/warshall。上述问题的解决方案也将有所帮助。

2.) 如何解决这个难题?我的算法是:

  1. 查找疏散点之间的最短路径(在上面的示例中,从 0 到 3 是 14)
  2. 将其乘以小时数以获得最大的保存次数

此外,为输入集的变体给出的答案是 24,我不明白。有人也可以解释一下。

更新:

我在给定的问题链接中得到答案是 14 - 它似乎只是节点 0 和 3 之间的最短路径。但是对于 3 小时的部分,答案是 24

更新

我知道它是 24 - 它每小时都有一个完整的图形遍历,这就是我解决它的方法

Hour 1
Node 0 to Node 1 - 10 people
Node 0 to Node 2- 5 people
TotalRescueCount=0
Node 1=10
Node 2= 5

Hour 2
Node 1 to Node 3 = 5(Rescued)
Node 2 to Node 4 = 5(Rescued)
Node 0 to Node 1 = 10
Node 0 to Node 2 = 5 
Node 1 to Node 2 = 4
TotalRescueCount = 10
Node 1 = 10
Node 2= 5+4 = 9

Hour 3
Node 1 to Node 3 = 5(Rescued)
Node 2 to Node 4 = 5+4 = 9(Rescued)
TotalRescueCount = 9+5+10 = 24

对于这种情况,对于多个疏散和救援点来说已经够难了,我到底要如何为此编写一个 pgm?

4

2 回答 2

3

一个好的通用方法是去像give.code项目这样的地方并参与一些逻辑难题(比如现在那里的 phylo bot)。

这是一个有意义的大型项目。即使失败,您也会全神贯注,帮助世界,并通过渗透学习。这将是在采访中谈论的话题。

您可以在无限搜索空间竞赛中找到其他更抽象的问题(旧recmath 竞赛的新精神家园)

我更喜欢这种自我提升的方法,而不是死记硬背地回答标准面试问题。

于 2012-06-28T07:42:34.210 回答
3

这看起来像一个网络流量问题,您可以从不同算法的链接开始解决它

http://en.wikipedia.org/wiki/Maximum_flow_problem

于 2012-06-29T12:16:46.107 回答