0
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 算法,我问这个问题的主要原因是因为与我自己的问题类似的其他问题往往是用向量来完成的。我还没学过向量。我想要做的是使用 ' ' 字符打印最短路径以将其显示在有效元素上。它应该在界限内,没有访问过墙(墙是'#'字符),并且不应访问两次任何元素。我知道如果我正确设置了我的前身二维数组,最短路径应该会正确显示。但是,我不确定我是否正确设置了它以及如何用' '字符实际填充该路径......

4

0 回答 0