如何在BFS算法之后找到最短路径?

时间:2016-11-10 14:18:41

标签: c++ breadth-first-search shortest

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 个答案:

没有答案