Могу ли я получить местоположения в моем векторе векторов для каждой точки для каждого из их соседей?

Изменить: Моя цель состоит в том, чтобы иметь возможность найти путь выхода из лабиринта символов, который находится в текстовом файле и будет введен через Cin. Итак, я создал вектор векторов персонажей для хранения этой карты лабиринта. Мой следующий шаг - найти путь эвакуации из начальной точки в конечную, используя стек или очередь.

Например: карта может быть

# * #
* * D
S * #

где # - стены, * - открытые пространства для прогулок, S - начало, а D - конец. Тогда решение для вывода будет следующим: ENEE.

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

Каков наилучший способ сделать это? Должен ли я генерировать свою матрицу по-другому или я могу добавить указатели отдельно?

Вот что я имею для вектора векторов:

vector<vector<char>> GetMap(int& M, int& N)
{
    vector<vector<char>> matrix{}; 
    char char_buf;

    for (int rows = 0; rows < M; rows++)
    {
        matrix.push_back(vector<char>()); 
        for (int cols = 0; cols < N; cols++)
        {
            cin >> char_buf; 
            matrix.back().push_back(char_buf);
        }
    }

    return matrix;
}

Всего 1 ответ


Я предполагаю, что вы имеете в виду, если у вас есть такой вектор:

vector<vector<char>> matrix = {{'A', 'B', 'C', 'D'},
                               {'E', 'F', 'G', 'H'},
                               {'I', 'J', 'K', 'L'},
                               {'M', 'N', 'O', 'P'}};

И индекс, скажем, [2, 2] ('K'), вы хотите иметь возможность перемещаться "Север" (до "G"), Юг (до "O"), Восток (до "L") или Запад (к «J»).

Здесь нет необходимости указателей, мы можем сделать это с помощью простой арифметики!

Вот пример, который я смоделировал, где у вас есть некоторые координаты формы [x, y] и dir в [N, S, E, W]:

switch(dir) {
    case 'N':
    case 'n':
        y = (y - 1) % matrix.size();
        break;
    case 'S':
    case 's':
        y = (y + 1) % matrix.size();
        break;
    case 'E':
    case 'e':
        x = (x + 1) % matrix[y].size();
        break;
    case 'W':
    case 'w':
        x = (x - 1) % matrix[y].size();
        break;
}

Смотрите это в действии здесь: ideone


Есть идеи?

10000