Я пытаюсь решить следующую проблему и не смог разработать алгоритм или подход.Я исследовал несколько часов и попытался сопоставить проблему с проблемой графика / матрицы «Кратчайший путь» или с проблемами динамического программирования, но безуспешно.
Дана сетка с шириной w, высотой h.Каждая ячейка сетки представляет потенциальную застройку, и мы будем добавлять «n» зданий внутри этой сетки.Цель состоит в том, чтобы самые дальние участки были как можно ближе к зданию.Учитывая ввод n, который представляет собой число зданий, которые будут размещены в партии, определите размещение зданий, чтобы минимизировать расстояние, на котором самая отдаленная пустая партия находится от здания.Движение ограничено горизонтальным и вертикальным, т.е. диагональное перемещение не требуется.
Например, w=4, h=4 and n=3
.Оптимальное размещение сетки устанавливает любой участок в двух единицах расстояния от здания.Ответ для этого случая - 2.
«0» указывает оптимальное размещение здания, и в этом случае максимальное значение всех кратчайших расстояний до ближайшего здания для каждой ячейки равно «2».
1 0 1 2
2 1 2 1
1 0 1 0
2 1 2 1
Вышеприведенное представляет одно оптимальное решение, может быть что-то похожее на приведенный выше массив, повернутый в качестве примера.Вышеуказанное является оптимальным решением, поскольку из 3 зданий (n = 3) одно здание было размещено с индексом (0,1), второе - с (2,1), а третье - с (2,3).Окружающее горизонтальное и вертикальное расстояние показано как 1 и 2, добавляя 1 каждый раз, когда мы перемещаемся по горизонтали и / или по вертикали.Обратите внимание, что диагональное перемещение недопустимо:
1 ← 0 → 1 → 2
↓
2 ← 1 → 2 ← 1
↑ ↑
1 ← 0 → 1 ← 0
↓ ↓
2 ← 1 → 2 ← 1
Другие примеры:
Пример 1)
w=3, h=3, n=2
Два здания (нули) должны быть расположены оптимально.Один из оптимальных планов для этого случая:
01
11
10
0 → 1
↓
1 1
↑
1 ← 0
Answer: 1
Например, следующий план не будет оптимальным в этом случае, поскольку он имеет максимальное наименьшее расстояние как 2 вместо 1. Таким образом, размещение 0жадно индекс (1,0) не работает, хотя 0 в этом случае охватывает три позиции «1» вместо двух, как в приведенном выше оптимальном сценарии.
1 → 2
↑
0 → 1
↓ ↑
1 ← 0
Пример 2)
w=5, h=1, n=1
Одно здание (нули) должно быть оптимально размещено.Один из оптимальных планов:
2 ← 1 ← 0 → 1 → 2
Answer: 2
Пример неоптимального плана в приведенном выше сценарии:
3 ← 2 ← 1 ← 0 → 1
Следующая функция должна быть выполнена:
int findMinDist(int w, int h, int n)
{
}
Ограничения:
1<=w,h
w*h <=28
1<=n<=5
n<=w*h
Мне не удалось написать какой-либо код, потому что, честно говоря, я не смог вывести решение.
Если две указанные точки являются фиксированными точкамив 2d матрице я могу найти расстояние или кратчайшее расстояние между ними.Но, в этом случае, я не знаю, где будут две точки?Там может быть много оптимальных решений и размещение комбинаций 0 в каждом месте, и найти самое дальнее расстояние невозможно и не будет возможным.Я попытался разместить их на позициях, которые дают максимальное количество 1 (например, среднее или w / 2), но это, похоже, тоже не работает.Может ли существующий алгоритм быть применен к этой проблеме?