递归:解决进口迷宫?

时间:2014-10-16 00:05:49

标签: java arrays recursion stack maze

我正在研究一个迷宫而且被卡住了。使用JFileChooser,我可以导入和读入.txt文件中的迷宫,其中一系列空格和主题标签确定路径和墙。 String path = " ";String wall = "#";

这是现在做的所有方法:

@Override
    public void readMaze() throws FileNotFoundException
    {
        int row;
        int col;

        JFileChooser chooser = new JFileChooser();
        Scanner in = null;

        if (chooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION)
        {
        File selectedFile = chooser.getSelectedFile();
        in = new Scanner(selectedFile);

        /*READ FILE*/
        Scanner readLine = new Scanner (new FileReader(selectedFile));

        col = readLine.nextInt();//first reading
            System.out.println(col);
        row = readLine.nextInt(); //second reading
            System.out.println(row);

        Array[][] array = new Array[row][col];

        do
        {
            String i = readLine.nextLine();

            //System.out.println(i);

            for (int j = 0; j < i.length(); j++)
            {
                String compare = i.substring(j, j+1);

                if(compare.equals(wall))
                {
                    //Do nothing, see if there's a path adjacent.
                    System.out.println("Wall");
                }
                if(compare.equals(path))
                {
                    System.out.println("Path");
                    //Check for additional paths.
                        // don't if explored
                        //else explore
                }
            }

        } while(readLine.hasNextLine() == true);

        readLine.close();

        }

    }

这是我们现在的界面,如果重要的话: public interface lab3MVCInterface

{
    enum direction {N, S, E, W};

    void readMaze() throws FileNotFoundException;
    void solveMaze();

    JFileChooser chooser = new JFileChooser();
    Scanner in = null;

    String wall = "#";
    String path = " ";
    void readMaze(JFileChooser chooser, Scanner in)
            throws FileNotFoundException;


}

但是我们没有任何线索如何确定是否有路径。这是一个课堂作业,所以我不是在寻找答案,但我希望在正确的方向上指出正确的方法。对于赋值,我们可以使用递归或堆栈来完成它...我们决定递归,因为堆栈在我们结束时是一场噩梦。

感谢您的协助! :)我知道在过去我没有跟进线程,但是我正在努力更新它们(在我丢失了我的帐户的密码后,我把自己锁在了电子邮件之外。去了。)我们说话! p>

编辑:这是从.txt文件打开的代码示例: (第一个数字设置数组[col] []值,第二个数字设置数组[] [row]值以进行大小调整。)

7
7
#######
    ###
### ###
### ###
#      
### ###
#######

2 个答案:

答案 0 :(得分:1)

首先,我不认为Array[][]是用于2D字符数组的正确数据类型。也许你可以改用char[][],因为每个元素都是' ''#'

其次,你可以做的是从&#34;条目开始&#34;迷宫的点,并将' '更改为'.'以表示&#34;我可以到达这里&#34 ;;然后,如果' ''.'相邻,则将'.'更改为'.'

泡沫,冲洗并重复,直到你到达终点,或者用完字符变为{{1}}(在这种情况下迷宫是不可能的)。

答案 1 :(得分:0)

这个问题很容易转化为图遍历问题。想象迷宫的每个“路径”点作为图形的顶点,并且当且仅当它们在迷宫中直接相邻时,在两个顶点之间添加边缘。之后,您可以使用BFS或DFS算法来查找是否存在从迷宫的起始顶点到结束顶点的路径。 如果使用BFS,您甚至不必显式构建图形,迷宫的2D数组也可以。对于每个顶点,您可以在4个方向上进行检查,检查它是否不在界限范围内且是否可访问(是空格字符),检查是否已经访问过它,如果没有将其添加到队列中。

希望这能为你提供进一步研究的足够指示。