плоские проблемы взрыва - справка

Я - учебные проблемы кода, и на этом у меня есть проблемы для решения его, можете Вы давать мне некоторые подсказки, как решить его.

Проблема взята отсюда:

https://www.ieee.org/documents/IEEEXtreme2008_Competitition_book_2.pdf

Проблема 12: циничные времена.

Проблема - что-то вроде этого (но действительно обратитесь к вышеупомянутой ссылке исходной проблемы, она имеет схему!):

Ваша задача состоит в том, чтобы найти последовательность точек на карте, что террорист, как ожидают, будет путешествовать таким образом, что она поражает все жизненные ссылки. Ссылка от до B жизненно важна, когда ее отсутствие изолирует полностью от B. Другими словами, единственный способ пойти от до B (или наоборот) по той ссылке.

Из-за вражеской контратаки, плоскости, вероятно, придется отступить в любой момент, таким образом, плоскость должна следовать, в каждый момент, к самой близкой жизненной возможной ссылке, даже если в конце общее расстояние растет.

Учитывая все координаты (исходное положение плоскости и узлов в карте) и диапазон R, необходимо определить последовательность положений, в которых плоскость должна сбросить бомбы.

Эта последовательность должна запуститься (взлет) и конец (приземляющийся) в исходном положении. За исключением запуска и конца, все другие положения должны упасть точно в сегменте карты (т.е. это должно соответствовать точке в нехите жизненный сегмент ссылки).

Используемая система координат будет UTM (Universal, Поперечная Меркаторский) northing и движение на восток, которое в основном соответствует Евклидовой перспективе мира (X=Easting; Y=Northing).

Введите Каждый входной файл, запустится с трех чисел с плавающей точкой, указывающих на X0 и координаты Y0 аэропорта и диапазона R. Вторая строка содержит целое число, N, указывая на количество узлов в графике дорожной сети. Затем следующий N (<10000) строки будет каждый содержать пару чисел с плавающей точкой, указывающих на координаты Кси и Yi (1 <я <=N). Заметьте, что индекс i становится идентификатором каждого узла. Наконец, последний блок запускается с целого числа M, указывая на количество ссылок. Затем следующий M (<10000) строки будет каждый иметь два целых числа, Ak и Bk (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 

1
задан Martijn Pieters 21 January 2015 в 22:27
поделиться

3 ответа

Думаю, Морон 'прав насчет первой части, но во второй части ... В описании проблемы ничего не говорится о «наименьшем количестве баллов». В нем говорится, что самолет летит к ближайшему жизненно важному звену. Итак, я думаю, что часть 2 будет намного проще:

  • Найдите ближайший к текущему местоположению сегмент без попадания.
  • Переместитесь к ближайшей точке на ближайшем сегменте.
  • Бомбите текущее место (удалите все сегменты, пересекающие круг)
  • Повторяйте, пока не останется незадействованных жизненно важных звеньев.

Этот простой алгоритм имеет сложность O (N * N), но этого должно быть достаточно с учетом входных ограничений.

0
ответ дан 3 September 2019 в 00:11
поделиться

Проблему можно разбить на две части.

1) Найти жизненно важные связи.

Это не что иное, как мосты в описанном графе. См. страницу вики (ссылка на которую дана в предыдущем предложении), там упоминается алгоритм Тарджана для поиска мостов.

2) Получив жизненно важные звенья, нужно найти наименьшее количество точек, которые, учитывая радиус бомбы, покроют звенья. Для этого для каждого звена создается область вокруг него, где сброс бомбы уничтожит его. Теперь вы формируете граф этих областей (две области являются смежными, если они пересекаются). Вероятно, вам нужно найти минимальное кликабельное разбиение в этом графе.

Не думал об этом до конца (особенно часть 2), но надеюсь, что это поможет.

И удачи в конкурсе!

1
ответ дан 3 September 2019 в 00:11
поделиться
  1. Сначала предварительно обработайте ввод, чтобы определить узкие места. Вам помогут такие алгоритмы, как Floyd-Warshall.
  2. Смоделируйте проблему как проблему эвристического поиска, вы можете вычислить MST, который охватывает все узкие места, и взять сумму затрат на ребра в качестве эвристики.
  3. Как сказали комментаторы, попытайтесь задать конкретные вопросы здесь или к ТА, наблюдающему за вашим классом.
  4. Не забудьте указать, откуда вы взяли эти подсказки.
1
ответ дан 3 September 2019 в 00:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: