Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.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
Java迷宫解决问题_Java_Recursion_Maze - Fatal编程技术网

Java迷宫解决问题

Java迷宫解决问题,java,recursion,maze,Java,Recursion,Maze,所以我被要求解决递归java函数中的一个迷宫,但我无意中发现了一个问题,递归函数似乎没有将正确的路径切换到“*” 任何帮助都将不胜感激 public class Maze { /** * This is only an example, * you can change this to test other cases but don't forget to submit the work with this main. * @param args */ public stati

所以我被要求解决递归java函数中的一个迷宫,但我无意中发现了一个问题,递归函数似乎没有将正确的路径切换到“*”

任何帮助都将不胜感激

 public class Maze 
 {

/**
 * This is only an example,
 * you can change this to test other cases but don't forget to submit the work with this main.
 * @param args
 */
public static void main(String[] args) 
{
    int M = 4;
    int N = 4;
    char[][] maze = {{'1','0','0','0'},{'1','1','0','0'},{'0','1','1','1'},{'0','0','0','1'}};

    if (findPath(maze, 0,0))
        printMaze(maze);
    else
        System.out.println("No solution");
}

private static void printMaze(char[][] maze) 
{
    for (int i = 0; i < maze.length; i++) 
    {
        for (int j = 0; j < maze[0].length; j++) 
        {
            System.out.print(maze[i][j] +" ");
        }
        System.out.println();
    }

}

// you should implement this function
private static boolean findPath(char[][] maze, int i, int j) 
{
    if ((i+1 > maze.length) || (j+1 > maze[i].length))
        return false;
    else
    {
        if (maze[i][j] == 1)
        {
            maze[i][j] = '*';
            if (maze[i+1][j] == 1)
            {
                return findPath(maze, i+1, j);
            }
            if (maze[i][j+1] == 1)
            {
                return findPath(maze, i, j+1);
            }
        }
    }
    return true;
}
公共类迷宫
{
/**
*这只是一个例子,,
*您可以将其更改为测试其他案例,但不要忘记使用此main提交工作。
*@param args
*/
公共静态void main(字符串[]args)
{
int M=4;
int N=4;
char[][]迷宫={{'1','0','0','0'},{'1','1','0','0'},{'0','1','1','1'},{'0','0','0','1'};
if(findPath(迷宫,0,0))
印刷迷宫;
其他的
System.out.println(“无解决方案”);
}
私有静态void打印迷宫(char[][]迷宫)
{
对于(int i=0;imaze.length)|(j+1>maze[i].length))
返回false;
其他的
{
if(迷宫[i][j]==1)
{
迷宫[i][j]='*';
if(迷宫[i+1][j]==1)
{
返回findPath(迷宫,i+1,j);
}
如果(迷宫[i][j+1]==1)
{
返回findPath(迷宫,i,j+1);
}
}
}
返回true;
}

}

您在第1页缺少引号

if (maze[i][j] == 1)
应该是

if (maze[i][j] == '1')
数字1和表示数字1的字符在Java(以及任何其他静态类型语言)中是两个不同的东西,因此无法检查它们是否相等


不过,我怀疑代码是否能找到所有路径,因为您似乎根本没有在左上搜索。

您在1 at周围缺少引号

if (maze[i][j] == 1)
应该是

if (maze[i][j] == '1')
数字1和表示数字1的字符在Java(以及任何其他静态类型语言)中是两个不同的东西,因此无法检查它们是否相等

不过,我怀疑代码是否能找到所有路径,因为您似乎根本没有在左上搜索。

使用以下代码:

private static boolean findPath(char[][] maze, int i, int j) 
{
        if (maze[i][j] == 1)
        {
            maze[i][j] = '*';
            if ((i+1 > maze.length && maze[i+1][j] == '1' && findPath(maze, i+1, j))
            {
                return true;
            }
            if ((j+1 > maze[i].length) && maze[i][j+1] == '1' && findPath(maze, i, j+1))
            {
                return true;
            }
            if (i>=1 && maze[i-1][j] == '1' && findPath(maze, i-1,j)){
                return true;
            }
            if(j>=1 && maze[i][j-1] == '1' && findPath(maze, i,j-1)){
                return true;
            }
        }
    return false;
}
使用此代码:

private static boolean findPath(char[][] maze, int i, int j) 
{
        if (maze[i][j] == 1)
        {
            maze[i][j] = '*';
            if ((i+1 > maze.length && maze[i+1][j] == '1' && findPath(maze, i+1, j))
            {
                return true;
            }
            if ((j+1 > maze[i].length) && maze[i][j+1] == '1' && findPath(maze, i, j+1))
            {
                return true;
            }
            if (i>=1 && maze[i-1][j] == '1' && findPath(maze, i-1,j)){
                return true;
            }
            if(j>=1 && maze[i][j-1] == '1' && findPath(maze, i,j-1)){
                return true;
            }
        }
    return false;
}

向上和向左怎么办?你只想通过向右和向下移动来找到路径?我还没有完成方向代码,我的问题是它没有将“1”转换为“*”,我可以在这里很容易找到答案,我自己比较理解,找到其他方向很简单。向上和向左怎么办,你想通过只向右和向下移动来找到路径?我还没有完成方向代码,我的问题是它没有将“1”转换为“*”,我可以在这里很容易找到答案,我自己比较理解,找到其他方向很简单。非常感谢。这就是我们所缺少的。现在,我将添加所有其他方向,并修复我得到的outOfBounds错误;)非常感谢。这就是我们所缺少的。现在,我将添加所有其他方向,并修复我得到的outOfBounds错误;)它不工作,只有0,0处的1被替换。我更新了解决方案,您必须检查递归调用是否找到了方法。但我仍然不知道它是否真的会结束,因为它无论如何都可以结束。不工作,不返回解决方案。谢谢你的尝试,德克斯特,但我已经解决了;)递归的边界有一个大问题。它不起作用,只有0,0处的1被替换。我更新了解决方案,您必须检查递归调用是否找到了方法。但我仍然不知道它是否真的会结束,因为它无论如何都可以结束。不工作,不返回解决方案。谢谢你的尝试,德克斯特,但我已经解决了;)递归的边界有一个大问题。