Как найти кратчайший путь после алгоритма BFS?

while( !q.is_empty() )
{
loc = q.remove_from_front();

//cout << loc.row << " " << loc.col << endl;
if( (loc.row-1) >= 0) //north
{
loc2.row = loc.row-1;
loc2.col = loc.col;

if(maze[loc2.row][loc2.col] != '#' && visited[loc2.row][loc2.col] == false)
{
visited[loc2.row][loc2.col] = true;

q.add_to_back(loc2);

//loc = predecessor[loc.row][loc.col];
predecessor[loc2.row][loc2.col] = loc;

if(maze[loc2.row][loc2.col] == 'F')
{
result = 1;
maze[loc2.row][loc2.col] = '*';

break;
}
}
}

if(loc.col-1 >= 0) //West
{
loc2.row = loc.row;
loc2.col = loc.col-1;

if(maze[loc2.row][loc2.col] != '#' && visited[loc2.row][loc2.col] == false)
{
visited[loc2.row][loc2.col] = true;

q.add_to_back(loc2);

//loc = predecessor[loc.row][loc.col];
predecessor[loc2.row][loc2.col] = loc;

if(maze[loc2.row][loc2.col] == 'F')
{
result = 1;
maze[loc2.row][loc2.col] = '*';

break;
}
}
}

if(loc.row+1 < rows) //South
{
loc2.row = loc.row+1;
loc2.col = loc.col;

if(maze[loc2.row][loc2.col] != '#' && visited[loc2.row][loc2.col] == false)
{
visited[loc2.row][loc2.col] = true;

q.add_to_back(loc2);

// loc = predecessor[loc.row][loc.col];
predecessor[loc2.row][loc2.col] = loc;

if(maze[loc2.row][loc2.col] == 'F')
{
result = 1;
maze[loc2.row][loc2.col] = '*';

break;
}
}
}

if(loc.col+1 < cols) //East
{
loc2.row = loc.row;
loc2.col = loc.col+1;

if(maze[loc2.row][loc2.col] != '#' && visited[loc2.row][loc2.col] == false)
{
visited[loc2.row][loc2.col] = true;

q.add_to_back(loc2);

//loc = predecessor[loc.row][loc.col];
predecessor[loc2.row][loc2.col] = loc;

if(maze[loc2.row][loc2.col] == 'F')
{
result = 1;
maze[loc.row][loc.col] = '*';

break;
}
}
}
}

if(result == 1)
{

while()
{
//not sure...
}
}

Это мой алгоритм BFS, и главная причина, по которой я задал этот вопрос, заключается в том, что другие вопросы, аналогичные моему собственному вопросу, обычно решаются с помощью векторов. Я еще не выучил векторы. Я пытаюсь распечатать кратчайший путь, используя‘символы для отображения на допустимых элементах. Он должен быть в границах, не посещать стены (стены обозначены символом «#»), и ни один элемент не должен посещаться дважды. Я знаю, что если я правильно установил 2D-массив своего предшественника, кратчайший путь должен отображаться правильно. Однако я не уверен, правильно ли я его настроил и как на самом деле заполнить этот путь с помощью ‘‘ персонажи…

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]