迷宫中的老鼠问题,在java中使用回溯法。

问题描述 投票:0回答:1

我已经写了java代码,但它是不给任何输出.任何人都可以帮助我解决.谢谢你.我已经提供了输入和输出。

下面是代码

输入-5 4OXOOOOOXOOOOXOXOOOOXXOOOO

輸出-1 0 0 0 1 1 0 0 0 1 0 0 0 1 1 1 0 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();
        }
    }

}
java recursion backtracking
1个回答
0
投票

你的代码有两个问题。首先来自于你读取输入字符的方式。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);
    }
}

你的方法是可行的,但要求每个字符都用空格隔开。

修正之后,你会在下面的程序中得到一个ArrayIndexOutOfBoundsException异常。print() 方法。你应该使用 ij 打印数组时,而不是 rowcol.

这将导致一些输出。我不知道这是否是你预期的输出。

© www.soinside.com 2019 - 2024. All rights reserved.