Можно ли создать матрицу смежности из двумерного массива узлов в С++?

Итак, у меня есть необработанный файл размером 250x200 пикселей, который я прочитал в 2D-массив, например rawFile[250][200], где каждый пиксель (каждый индекс массива) действует как узел, а каждое значение пикселя представляет высоту (например, топографическую карту). Я хочу найти кратчайший путь, используя алгоритм Дейкстры от rawFile[0][0] до rawFile[250][200], при этом стоимость расстояния представляет собой абсолютное значение разницы перехода от node1 до node2 плюс расстояние кратчайшего пути до текущего посещаемого узла. Каждый узел может двигаться в четырех основных направлениях (N, E, S, W), при условии, что в соответствующем направлении есть соседний узел. Я читал псевдокод и различные реализации, для которых требуется матрица смежности или список смежности, который в данном случае будет adjMatrix[50000][50000]. Однако я изо всех сил пытаюсь понять, как я могу заполнить матрицу смежности только из необработанного файла.

Есть ли у кого-нибудь из вас предложения по решению этой проблемы? Спасибо!


person alacy    schedule 01.12.2014    source источник


Ответы (1)


Преобразование изображения в матрицу смежности совершенно не нужно; единственное, что вам нужно, это информация о «соседстве», которая уже неявно присутствует.

Соседи любого пикселя i,j представлены пикселями (i-1,j), (i+1,j), (i,j-1), (i,j+1) с учетом границ изображения. Вам не нужна матрица, чтобы закодировать это; каждый раз, когда алгоритм говорит посмотреть на соседей, просто укажите соседние пиксели.

person tzaman    schedule 01.12.2014