Это решение, о котором я подумал:
Для простоты я буду рассматривать матрицу как график.
Итак, обозначим начальную позицию как s
(вершина) ипункт назначения как d
(вершина).
Теперь мы будем запускать BFS один раз с источником s
и один раз с источником d
.
Таким образом, мы имеем для каждой вершины v
минимальное расстояние от s
до v
и минимальное расстояние от v
до d
(расстояние может быть бесконечностью, например, все вершины со значением 0 в матрице имеют бесконечность расстояния).
Теперь для каждой вершины v
со значением 0
в матрице сделайте следующее:
для каждой пары соседей из v
(в матрице, не более 4) ГДЕ ЗАМЕЧАЕТ,это означает, что пара вершин a
и b
отличается от b
и a
.
Максимум 4! / 2!= 12 пар.
Обозначим пару вершин a
и b
и вычислим следующее расстояние:
s-> a + 1 + 1 + b-> d (s-> a, b-> d дано, это расстояние для пути s-> a-> v-> b-> d).
Выберите минимум из этих расстояний (максимум 12 из них)и это минимальное расстояние от s
до d
с перевернутым v
.
Теперь вы можете узнать, какое из них перевернуть, а также минимальное расстояние.
Сложность =O (V
+ E
)
РЕДАКТИРОВАТЬ:
Если матрица имеет размер n
x n
, то V
= n ^ 2
и в качестве каждой вершиныимеет не более 4 ребер, тогда E
= O(n^2)
=> O(n ^ 2)
.