Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 用递归求解C++;?_C++_Recursion_Maze - Fatal编程技术网

C++ 用递归求解C++;?

C++ 用递归求解C++;?,c++,recursion,maze,C++,Recursion,Maze,我试图创建一个程序,可以通过递归解决迷宫。我的代码基于几个可以在网上找到的步骤,特别是: 如果(x,y在迷宫外)返回false 如果(x,y是目标)返回true 如果(x,y未打开)返回false 将x、y标记为解决方案路径的一部分 if(FIND-PATH(x,y以北)=true)返回true if(FIND-PATH(x,y以东)=true)返回true if(FIND-PATH(x,y以南)=true)返回true if(FIND-PATH(x,y以西)=true)返回true 取消将x、

我试图创建一个程序,可以通过递归解决迷宫。我的代码基于几个可以在网上找到的步骤,特别是:

  • 如果(x,y在迷宫外)返回false
  • 如果(x,y是目标)返回true
  • 如果(x,y未打开)返回false
  • 将x、y标记为解决方案路径的一部分
  • if(FIND-PATH(x,y以北)=true)返回true
  • if(FIND-PATH(x,y以东)=true)返回true
  • if(FIND-PATH(x,y以南)=true)返回true
  • if(FIND-PATH(x,y以西)=true)返回true
  • 取消将x、y标记为解决方案路径的一部分
  • 返回错误
  • 我已经看到了至少两个关于这个算法的其他问题,但我很确定这些问题并不完全相同

    bool path (string maze[], int x, int y){
        values val;
        bool check;
        //for (int k=0; k<val.xDim; k++) cout<<maze[k]<<endl;
        cout<<x<<":"<<y<<endl;
        if (x>val.xDim || y>val.yDim || x<0 || y<0) {cout<<"end\n"; return false;  }
        if (maze[x][y]=='x') return true;                           //If exit is reached
        if (maze[x][y]=='%' || maze[x][y]=='+') return false;       //If space is filled
        maze[x][y]='+';
        if (path(maze, x-1, y)==true) return true;
        cout<<"endtwo\n";
        if (check=path(maze, x, y+1)==true) return true;
        if (path(maze, x+1, y)==true) return true;
        if (path(maze, x, y-1)==true) return true;
        maze[x][y]='.';
        return false;
    }
    
    int main(){
        if (path(maze, val.startX-1, val.startY)==true) {
            for (int k=0; k<val.xDim; k++) cout<<maze[k]<<endl;
        } else cout<<"No solution found.\n";
    }
    
    输出:

    -1:1
    end
    No solution found.
    
    据我所知,路径方法应该首先检查入口正上方的空间,该空间位于迷宫之外(返回false)。接下来,它应该检查east(以此类推)。但是,当我运行它时,函数返回false,并且无法继续执行以下if语句。这可以通过打印“end”而不是“endtwo”(在北向检查后找到)这一事实来说明。我不确定我的递归逻辑或我的递归实现是否存在某种形式的问题,所以我希望对此有一些澄清


    提前谢谢

    您的第一次签入
    bool path(…)
    发现x您从一个无效位置开始,因此,如果(path(maze,val.startX-1,val.startY)==true){,请尝试此
    如果(path(maze,val.startX,val.startY)==true){
    。如果您不介意将迷宫中的
    'e'
    替换为
    ',实际的递归部分对我来说似乎没什么问题。

    我不确定,但我觉得这个问题最适合@anakata-我认为那个网站不适合这个问题,因为这些网站通常面向编程难题/问题的最短解决方案,而这是一个编程/调试问题。该网站是。据我所知,该算法检查迷宫中任何特定点的出口是否存在路径。values val是什么?它看起来是声明和使用的,但从未初始化过。哦,对不起。values只是一个n包含一些整数。我对使用继承不太熟悉,所以我将维度和起始位置作为公共整数放在“值”中为了避免将许多值传递给path。当然,这并不意味着算法的其余部分是好的:P我没有测试它!这太尴尬了。我检查了所有其他内容,但没有意识到我原来的调用是错误的。我甚至不记得为什么一开始就有-1。非常感谢!
    -1:1
    end
    No solution found.