递归搜索迷宫中的路径

问题描述

编辑:仅当迷宫边界上没有空墙的空白处时,才能找到迷宫出口。

Edit2:收到帮助后,我对代码进行了一些更改,但是仍然遇到相同的问题。 可能是我没有使用正确提及的内容。 我已将代码段更改为仅一个递归(上移部分),以最大程度地减少查看代码段时不必要的重复。

(仍然是编码的新事物,所以希望您不要介意) 我正在尝试为一个程序编写代码,该程序可以打印一个人在给定迷宫中寻找路径的运动。

但是,我遇到了一个问题,即到达迷宫出口后,该人回到原来的位置。

原始位置由(x,y)坐标给出。

这是我的函数摘要,它找到了穿过迷宫的路径:

bool find_path(char **maze,long **track,long rows,long cols,long x,long y,long steps)
{
  bool found;
  if (goal_found(maze,rows,cols,x,y)) {
    return true;
  }

  track[y][x] = 2;

  if (maze[y - 1][x] == EMPTY && track[y - 1][x] == 1) { // Move Up
    steps++;
    found = find_path(maze,track,y - 1,steps);
    if (found) {
      return true;
    }
    ++steps;
  }
}

解决方法

您的程序在迷宫中找到所有路径;如果要停止它,则需要更改调用以在遇到成功时停止遍历迷宫:

  found = search_maze(maze,track,rows,cols,x,y + 1,steps);
  swap(maze,y,x);
  if (found) {
      return found;
  }

所有递归调用。