我刚参加了一个编程竞赛题,我绝对把它搞砸了。我一开始就在阅读输入集时遇到了麻烦。这个问题基本上是这个谜题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.) 如何解决这个难题?我的算法是:
- 查找疏散点之间的最短路径(在上面的示例中,从 0 到 3 是 14)
- 将其乘以小时数以获得最大的保存次数
此外,为输入集的变体给出的答案是 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?