我正在训练代码问题,在这一方面我遇到问题需要解决它,你能不能给我一些如何解决它的提示。
问题来自这里:
https://www.ieee.org/documents/IEEEXtreme2008_Competitition_book_2.pdf
问题12:愤世嫉俗的时代。
问题是这样的(但是请参考上面的源问题链接,它有一个图表!):
你的任务是在地图上找到轰炸机预计行驶的点序列,以便击中所有重要的链路。从A到B的链接在其缺失时完全将A与B隔离开来是至关重要的。换句话说,从A到B(反之亦然)的唯一方法是通过该链接。
由于敌人的反击,飞机可能不得不随时撤退,因此飞机应该在每个时刻跟随可能的最近的重要链路,即使最终总距离变大。
给定所有坐标(平面的初始位置和地图中的节点)和范围R,您必须确定飞机必须投下炸弹的位置顺序。
此序列应在初始位置开始(起飞)并完成(着陆)。除了开始和结束之外,所有其他位置必须精确地落在地图的一段中(即,它应该对应于未命中的重要链接段中的点)。
使用的坐标系统是UTM(Universal Transverse Mercator)北向和东向,它基本上对应于世界的欧几里德视角(X = Easting; Y = Northing)。
输入 每个输入文件将以三个浮点数开始,表示机场的X0和Y0坐标以及范围R.第二行包含一个整数N,表示道路网络图中的节点数。然后,接下来的N(<10000)行将各自包含一对指示Xi和Yi坐标的浮点数(1
没有两个链接会相互交叉。
输出 程序将按照飞机应该访问的顺序(在机场开始和结束)打印坐标序列(成对的浮点数,只有一个小数位),每个坐标在一条线上。
Sample input 1
102.3 553.9 0.2
14
342.2 832.5
596.2 638.5
479.7 991.3
720.4 874.8
744.3 1284.1
1294.6 924.2
1467.5 659.6
1802.6 659.6
1686.2 860.7
1548.6 1111.2
1834.4 1054.8
564.4 1442.8
850.1 1460.5
1294.6 1485.1
17
1 2
1 3
2 4
3 4
4 5
4 6
6 7
7 8
8 9
8 10
9 10
10 11
6 11
5 12
5 13
12 13
13 14
Sample output 1
102.3 553.9
720.4 874.8
850.1 1460.5
102.3 553.9
答案 0 :(得分:1)
答案 1 :(得分:1)
问题可以分为两部分。
1)找到重要的链接。
这些只不过是图中描述的Bridges。查看维基页面(链接到上一句),它提到了Tarjan找到桥梁的算法。
2)一旦你拥有了重要的链接,你需要找到给出炸弹半径的最小点数,将覆盖链接。为此,对于每个链接,您在其周围创建一个区域,丢弃炸弹将破坏它。现在,您可以形成这些区域的图形(如果它们相交,则两个区域相邻)。您可能需要在此图表中找到最小clique partition。
没有考虑过(特别是第2部分),但希望它有所帮助。
祝你好运!
答案 2 :(得分:0)
我认为 Moron '对于第一部分是正确的,但在第二部分...... 问题描述并未说明“最小点数”。它告诉飞机飞到最近的重要链路。 所以,我认为第2部分会更简单:
这种直接算法的复杂度为O(N * N),但考虑到输入约束,这应该足够了。