Как мы находим два наиболее нагруженных маршрута в сетке?

Мы, учитывая взвешенную сетку N*N W. Два робота r1, r2 запускаются с левых верхних и правых верхних углов соответственно. R1 должен достигнуть к правому нижнему и R2 левых нижних углов. Вот действительные шаги.

  • R1 спускает один квадрат, R2, перемещает один покинутый квадрат.
  • R1 перемещает одно квадратное право, R2, спускает один квадрат.

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

Для Примеров, если сетка:

  6 0 3 1
7 4 2 4
3 3 2 8
13 10 1 4
 

В этом примере, если R1 идет по пути, отмеченному * и R2, идет по отмеченному пути ^, как показано ниже, их объединенный счет равняется 56.

  6* 0 3^-1^
 7* 4*^ 2^ 4
- 3 3*^-2* 8*
 13^ 10^-1 - 4*
 

Это может быть проверено, что это - лучший объединенный счет, который может быть достигнут для этой сетки.

We cannot solve this by recursion as N <= 2500 and the time limit is 2 seconds.
If the problem had only one robot, we could solve this by using dynamic programming.

Я пытался использовать аналогичный подход для этой проблемы;

We have two extra N*N grids G1,G2,

for i from 1 to N:
   for j from 1 to N and K from N down to 1:  
     if (G1[i-1][j] + G2[i][k+1]) > (G1[i][j-1] + G2[i-1][k]):
        G1[i][j] = G1[i-1][j] + W[i][j]
        G2[i][k] = G2[i][k+1] + W[i][k]
     else:
        G1[i][j] = G1[i][j-1] + W[i][j]
        G2[i][k] = G2[i-1][k] + W[i][k]

return G1[N][N] + G2[N][1]

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

Кто-либо может сказать мне что не так с моим методом и как я могу исправить его, чтобы получить правильный ответ?

2
nl ja de
@rekire я не думаю, что это - проблема графа, но динамическая проблема программирования, потому что это - взвешенная сетка, а не матрица смежности dijkstra' s привычка алгоритма подойти для этого.
добавлено автор 2147483647, источник
@AshRj я не хочу алгоритм графа, но динамический программный алгоритм, также маршруты этих двух роботов, зависят друг от друга
добавлено автор 2147483647, источник
Вы пробовали алгоритм dijkstra?
добавлено автор rekire, источник
Если я угадываю, то просто необходимо инвертировать метрику, и это должно хорошо работать. Но I' ll читают, вы подвергаете сомнению во второй раз.
добавлено автор rekire, источник
Попробуйте нагруженный BFS, если вы определенно хотите алгоритм графа
добавлено автор asheeshr, источник

2 ответы

Я видел опечатку в 2-м действительном сценарии

Действительный 2-й сценарий должен быть

R1 moves one square right, R2 moves one square down

но был дан как

R2 moves one square right, R2 moves one square down

1
добавлено
да ваш правильные.
добавлено автор 2147483647, источник

It is a graph problem, and the graph is G=(V,E) where:

  • V = площади x площади ( Декартово произведение из всех площадей)
    (Вы могли бы хотеть исключить пункты, где (x1, y1) = (x2, y2), он может быть легко сделан).
  • E = {все возможные способы переместиться в поворот} = (или официально) =
    {(((x1, y1), (x2, y2)), ((x1-1, y1), (x1, y1-1))), (((x1, y1), (x2, y2)), ((x1, y1-1), (x1-1, y1))) | за x1, y1, x2, y2}

Теперь, как только у нас есть граф - мы видим, что это на самом деле ДАГ - и это - хорошая вещь, потому что для графа общего случая - самая долгая проблема пути NP-трудный, но не для DAG.

Теперь, учитывая DAG G , мы хотим найти, что самый длинный путь из ((0,0), (n, n)) ((n, n), (0,0)) , и это может быть сделано со следующим подходом:

Поскольку простота определяет вес ((x1, y1), (x2, y2)) = вес (x1, y1) + вес (x2, y2) :

алгоритм:

  1. Использование топологический вид на графе
  2. Init D ((n, n), (0,0)) = вес ((n, n), (0,0)) (целевой узел)
  3. Повторяет граф согласно спуску вида и делает для каждой вершины v :
    D (v) = макс. {D (u) | для каждого (v, u) в E, как описано выше} + вес (v)

Когда вы будете сделаны, у D ((0,0), (n, n)) будет оптимальный результат.

1
добавлено
@A.06: Это doesn' t действительно имеют значение what' s начало и цель - просто изменяют тех, то же самое применяется. Обратите внимание, что в графе мы построили - шаги действительно сделаны всегда вместе, если шаги роботов - другой двигается в его действительное направление также.
добавлено автор amit, источник
"Теперь, учитывая ДАГА Г, мы хотим найти самый длинный путь от ((0,0), (n, n)) к ((n, n), (0,0))", Мы на самом деле хотим найти самый длинный путь от ((0,0) (0, N) к ((N, N) (N, 0))). И есть ограничения на то, как мы можем двинуться, шаги всегда будут вместе
добавлено автор 2147483647, источник