Это метод класса, который используется для нахождения выхода 3-мерного лабиринта, представленного в виде 3-мерного массива. Сам массив содержит строки длиной 6 или 1 или 0. А '1' в строке означает, что вы можете двигаться в этом направлении. Например, если строка в текущем элементе массива равна 100001, это означает, что вы можете перемещаться на север, и вы также можете перемещаться вниз по уровню. Битовая строка соответствует направлениям северо-восток на юго-запад вниз. Этот метод в настоящее время не завершен, поэтому я знаю, что он еще не нашел жизнеспособного решения, но оператор switch в конце вызывает ошибку за пределами границ во время выполнения. Я представляю 3-мерный массив как 3-й куб с самым внешним массивом, представляющим вертикальную ось, средний массив, представляющий ось z, входящую и выходящую из страницы, и самый внутренний массив, представляющий горизонтальную ось x. Когда в текущей ячейке в лабиринте вы смотрите на каждый бит в строке. Для каждого возможного перемещения вы добавляете этот переход в q. После того, как вы посмотрели на строку, вы двигаетесь в направлении, которое сначала было добавлено в очередь, и повторите. Любая помощь приветствуется.Что вызывает ошибку вне времени выполнения массива?
void maze::solve(int startlevel, int startrow, int startcol, int endlevel, int endrow, int endcol)
{
position current, exit;
current.level = startlevel;
current.row = startrow;
current.col = startcol;
exit.level = endlevel;
exit.row = endrow;
exit.col = endcol;
q.push('0');
while (!q.empty())
{
if (current == exit)
{
cout << "exit found" << endl;
return;
}
if (mazeGraph[current.level][current.row][current.col].at(0) == '1')
q.push('n');
if (mazeGraph[current.level][current.row][current.col].at(1) == '1')
q.push('e');
if (mazeGraph[current.level][current.row][current.col].at(2) == '1')
q.push('s');
if (mazeGraph[current.level][current.row][current.col].at(3) == '1')
q.push('w');
if (mazeGraph[current.level][current.row][current.col].at(4) == '1')
q.push('u');
if (mazeGraph[current.level][current.row][current.col].at(5) == '1')
q.push('d');
if (q.front() == '0')
q.pop();
switch (q.front())
{
case 'n':
current.row -= 1;
case 'e':
current.col += 1;
case 's':
current.row += 1;
case 'w':
current.col -= 1;
case 'u':
current.level += 1;
case 'd':
current.level -= 1;
}
}
return;
}
Я пытаюсь сделать это с помощью «, если (current.level <0 || current.level> = this.numlevels) \t \t { \t \t \t COUT << "вне границ" << епсИ \t \t} « , но компилятор говорит, что для« этого »требуется тип класса – Flower