Получение смежных элементов 2D-матрицы (только для глубины) - PullRequest
1 голос
/ 31 марта 2011

У меня изображение 800 на 600. Я хочу обработать это как матрицу и получить смежные элементы

ех.

(0,0) (1,0) (2,0) (3,0)

(0,1) (1,1) (2,1) (3,1)

(0,2) (1,2) (2,2) (3,2)

(0,3) (1,3) (2,3) (3,3)

пример решения: (0,0) соседствует с: (1,0) (0,1) (1,1)

(1,1) соседствует с: (0,0) (1,0) (2,0) (2,1) (2,2) (1,2) (0,2) (0, 1)

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

typdef struct point
{
    int x;
    int y;
}point[800*600];

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

1 Ответ

0 голосов
/ 31 марта 2011

Окончательный ответ зависит от того, как вы визуализируете расположение вашего 2D-дисплея в массиве 1D ('row-first column-last' или 'column-first row-last').

Предполагается, что строка-first '(пиксели вдоль увеличения строки на 1, пиксели вдоль увеличения столбца на ROW_LENGTH):

Сначала используйте некоторые определения, чтобы установить значения для ROW_LENGTH и COL_LENGTH

#define ROW_LENGTH 800
#define COL_LENGTH 600

Затем вы можетелегко отрегулируйте свой размер, если необходимо изменить, не влияя на работу остального кода.

typdef struct point
{
    int x;
    int y;
}point[ROW_LENGTH*COL_LENGTH];

Позже, соседние точки можно получить с помощью чего-то вроде:

adjacentWest = point[(y*ROW_LENGTH) + (x-1)];
adjacentNorth = point[((y+1)*ROW_LENGTH) + x];

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

...