Для моего назначения C++я в основном пытаюсь выполнить поиск по куску текста в текстовом файле (который передается в мой вектор vec
), начиная со второго верхнего символа слева. Это для текстового лабиринта, где моя программа в конце концов должна распечатать символы для пути через него.
Пример лабиринта будет выглядеть следующим образом:
###############
Sbcde####efebyj
####hijk#m#####
#######lmi#####
###############
###############
###############
###############
###############
###############
###############
###############
###############
###############
###############
Где '#' — это непроходимая стена, и вы всегда начинаете слева со второго верхнего символа. Буквенные символы обозначают проходимые квадраты. Выход(ы) ВСЕГДА справа. Лабиринт всегда имеет размер 15x15 в файле maze.text. Буквенные символы повторяются в пределах одного лабиринта, но не непосредственно рядом друг с другом.
Здесь я пытаюсь сделать следующее: если квадрат рядом с текущим имеет алфавитный символ, добавьте его в вектор vec
и повторяйте этот процесс, пока не доберусь до конца лабиринта. В конце концов, я должен усложнить это, напечатав на экране несколько путей, которые существуют в некоторых лабиринтах.
До сих пор у меня есть это для самого алгоритма, что, как я знаю, неверно:
void pathcheck()
{
if (isalpha(vec.at(x)) && !(find(visited.begin(), visited.end(), (vec.at(x))) != visited.end()) )
{
path.push_back(vec.at(x));
visited.push_back(vec.at(x));
pathcheck(vec.at(x++));
pathcheck(vec.at(x--));
pathcheck(vec.at(x + 16));
pathcheck(vec.at(x - 16));
}
}
visited
— это мой вектор, отслеживающий посещенные квадраты.
Как бы я обновил это, чтобы оно действительно работало, и в конечном итоге я мог бы управлять более чем одним путем (т.е. если бы было 2 пути, программа печатала бы на экран оба из них)? Я помню, как мне сказали, что мне может понадобиться другой вектор / массив, который отслеживает квадраты, которые я уже посетил / проверил, но тогда как я буду реализовывать это здесь точно?