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

Редактировать: Моя цель - найти путь выхода из лабиринта символов, который находится в текстовом файле и будет введен через 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 Ответ

0 голосов
/ 17 мая 2019

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

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

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