java - java中使用回溯的老鼠迷宫问题

标签 java recursion backtracking

我已经编写了java代码,但它没有给出任何输出。任何人都可以帮助我解决这个问题吗?谢谢。我已经提供了输入和输出。

这是代码-

输入- 5 4 奥克斯奥 奥克斯 奥氏体 XOO XXOO

输出- 1 0 0 0 1 1 0 0 0 1 0 0 0 1 1 1 0 0 0 1

import java.util.*;

public class ratMaze {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        int M = sc.nextInt();
        char[][] ch = new char[N][M];
        for(int i=0;i<N;i++)
        {
            for(int j=0;j<M;j++)
            {
                ch[i][j]=sc.next().charAt(0);
            }
        }
        int[][] visited = new int[N][M];
        boolean res=ratmaze(ch,0,0,visited);
        if(res)
            print(visited,N,M);
        else
            System.out.print("-1");

    }

    private static boolean ratmaze(char[][]ch,int row,int col,int[][] visited)
    {
        if(row==ch.length-1 && col==ch[0].length-1)
            return true;

        if(row==ch.length || col==ch[0].length || ch[row][col]=='X' || visited[row][col]==1)
            return false;

        visited[row][col]=1;

        //Right
        ratmaze(ch,row,col+1,visited);

        //Down
        ratmaze(ch,row+1,col,visited);

        visited[row][col]=0;

        return true;
    }

    private static void print(int[][] visited,int row,int col)
    {
        for(int i=0;i<row;i++)
        {
            for(int j=0;j<col;j++)
            {
                System.out.print(visited[row][col]+" ");
            }
            System.out.println();
        }
    }

}

最佳答案

您的代码有两个问题。首先来自读取输入字符的方式。 Scanner.next() 返回整个 token 。在这种情况下,标记是一个“单词”——受空格或行首/行尾限制的东西。在您的示例中,输入“OXOO”是一个标记。您需要修改您的读取方式,以便在外循环中读取 token ,然后访问特定位置的字符。你可以这样做:

for (int i = 0; i < N; i++) {
    String token = sc.next();
    for (int j = 0; j < M; j++) {
        ch[i][j] = token.charAt(j);
    }
}

它按照您的方式“工作”,但要求每个字符用空格分隔。

修复此问题后,您将在 print() 方法中收到 ArrayIndexOutOfBoundsException。打印数组时应使用 ij,而不是 rowcol

这将产生一些输出。我不确定这是否是您期望的输出。

关于java - java中使用回溯的老鼠迷宫问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62170284/

相关文章:

java - 正则表达式验证 3 个重复字符

java - sigar-amd64-winnt.dll ... 无法引用它或将其与 .jar 捆绑在一起

java - AnglePicker 类似 Android API19 TimePicker

python - 在没有递归的情况下计算任意嵌套列表列表中的所有元素

Prolog 堆栈外错误

java - Tomcat : How to share data between two applications?

swift - 使用取决于元素类型的递归属性/方法扩展 Collection

java - 骑士之旅需要回溯

algorithm - 回溯中是否有 do -> recurse -> undo 模式的名称?

对递归的理解感到困惑