Моя текущая рекурсивная функция работает до некоторой степени, но затем разрушается, когда возвращается в стек.
void Graph::findPath( Room * curRoom )
{
if( curRoom -> myNumber == 0 )
{
cout << "Outside.\n";
//Escape the recursion!
}
else
{
curRoom -> visited = true;
if( curRoom -> North -> visited == false )
{
escapePath[ _index ] = "North";
cout << "_index: " << _index << "\n";
++_index;
findPath( curRoom -> North );
cout << "_index: " << _index << "\n";
escapePath[ _index ] = "";
--_index;
}
if( curRoom -> East -> visited == false )
{
escapePath[ _index ] = "East";
cout << "_index: " << _index << "\n";
++_index;
findPath( curRoom -> East );
cout << "_index: " << _index << "\n";
escapePath[ _index ] = "";
--_index;
}
if( curRoom -> South -> visited == false )
{
escapePath[ _index ] = "South";
cout << "_index: " << _index << "\n";
++_index;
findPath( curRoom -> South );
cout << "_index: " << _index << "\n";
escapePath[ _index ] = "";
--_index;
}
if( curRoom -> West -> visited == false )
{
escapePath[ _index ] = "West";
cout << "_index: " << _index << "\n";
++_index;
findPath( curRoom -> West );
cout << "_index: " << _index << "\n";
escapePath[ _index ] = "";
--_index;
}
}
}
Чтобы сэкономить ваше чтение, идея состоит в том, что базовый случай находит 0. В противном случае он пробует четыре разных кардинальных направления, то есть номер с другим номером. Каждый раз, когда он делает ход, он добавляет ход, который он сделал, во внешний массив, и каждый раз, когда он возвращается, он удаляет этот шаг из стека.
Моя проблема в том, что он сохраняет правильный путь, когда находит 0, но удаляет его при обратном копировании.
Есть ли способ избежать этого, например, перерыв.
Нет gotos или исключений