“我想去阿拉伯市场去买一份我爱上的礼物。但是,如果我来得太晚,所有的商店都会关门,我将无法买到任何东西。你能帮忙吗?我吗? “
目标:在所有商店关门之前从北里士满街(North Richmond Street)带男孩去阿拉比(Araby)。
实际目标:确保男孩在商店关门之前没有到达阿拉比。
您的程序将采用以下格式输入:
<time> <map>
哪里
<time>
是男孩可以旅行的最长时间,以分钟为单位。它是一个正整数。<map>
是火车可以走的路线图。
这是图形格式的工作方式:
- 每个语句以分号结尾。
- 映射中的节点(代表开关)使用单个小写字母表示。
- 节点之间的路径用语法表示
a,X,b
,其中X
是表示路径权重的整数。路径的权重是火车经过这两个节点所花费的时间(以分钟为单位)。 - 阿拉伯文(Araby)代表
a
,北里士满街(North Richmond Street)代表n
。 - 所有路径都是双向的。
例如,此图(假设路径是双向的):
图片来自Artyom Kalinin,来自Wikimedia Commons。根据CC BY-SA 3.0许可使用。
将在图形符号中记录为:
a,4,b;a,2,c;b,5,c;b,10,d;c,3,e;e,4,d;d,11,f;
请注意,此输入没有n
,因此是无效的输入。如果输入无效,您的程序可能会执行任何操作。
这是一个示例输入:
21 n,4,b;n,2,c;b,5,c;b,10,d;c,3,e;e,4,d;d,11,a;
(这是与上面的图片相同的图形,a
用n
和f
代替了a
)。
男孩必须从取得n
到a
21分钟内。如果他走这条路线n
-> c
-> e
-> d
-> a
,他会在20分钟内到达那里,这是及时的。我们可以将该路由表示为以逗号分隔的节点列表:
n,c,e,d,a
另一方面,路线n
-> b
-> c
-> e
-> d
-> a
将导致男孩花27分钟,这不是及时的。我们可以这样表示该路线:
n,b,c,e,d,a
另一个可能导致男孩无法及时赶到的方法是:
n,b,c,b,c,b,c,b,c,b,c,b,c,b,c,b,c,b,c,e,d,a
您的程序应该如上所述接受输入,乍一看似乎输出的一条路线将使男孩及时完成,但实际上输出一条导致该男孩无法及时完成的路线。对于任何给定的输入,总会有一条没有回溯的路线,这会导致男孩无法及时到达目的地。
这是一场不受欢迎的人气竞赛,因此得票最多的作品将获胜。投票是因为隐藏虫子的技巧而获得的-越不明显,它就越好。
这是一些示例图,可用来测试您的程序。
输入:
12 a,2,c;a,2,e;b,5,c;b,4,d;b,11,e;d,7,n;e,4,n;
视觉表示(此视觉表示仅是为了清楚起见,并不构成挑战的一部分):
一个可能的输出:
n,d,b,e,a
输入:
10 a,8,b;a,12,d;b,1,n;d,11,n;a,1,n;
这是图形的可视图像:
一个可能的输出:
n,d,a