如何使用堆栈遍历java迷宫

时间:2014-03-04 20:59:23

标签: java

示例迷宫:

WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
WSOOOOOOOOOOOOOOWOOOOOOOOOOOOOOOOOWOOOOOOOOOOOOOOOWOOOOOOW
WWOOOOOOOOOOOOOWWWWWWWWWWWWWOOOOOOOOOOWWWWWWWWWWWWWOOOOOOW
WWWWWWOOOOOOOOOOOOWWWWWWWOOOOOOOOOOOOWWWWWWWWWWWWWWWWOOOOW
WOOOOOOWWWWWWWWWWWWWWOOOOOOOOOOOWWWWWWWWOOOOOOOOOOOOOOOWWW
WOOOOWWWWWWWOOOOOOWWWWOOOOOOWWWWWWWWWWWOOOOWWWWWWWWWOWWWWW
WOOOWWWWWWWWWWWWOOWWWWWWWWWWWWOOOOOOOOOOOOWWWWWWWWWOOOOOWW
WOOWWWWWWWWWWWWWOOWWWWWWWWWWWWWWWWWOOOOOOOWWWWWWWWWWWWOOOW
WOWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWOOOOOOOWWWWWWWWWWWOOW
WOWWWWWWWWWWWWWOOOOOOOOOOOOOOOOOOOOOOOOOOOOWWWWWWWWWWWWOOW
WOOOOOOOOOOOOOOOOWWWWOOOOOOOOWWWWWWWOOOOOOWWWWWWWWWWWWWOFW
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW

我们需要接受上面的txt文件,如果可以解决,则使用堆栈返回true或false。

我的问题是:如何从文件中逐个取出字符,并将它们分配为2D数组中的点以推入堆栈?我在下面有一些伪代码......

这是我的......

   import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import java.util.Stack;
import java.awt.Point;


public class MazeExplorer {
    public static int x;
    public static int y;

    final int mazeHeight = 12;
    final int mazeWidth = 58;
    public static char[][] mazeLocationPoints = new char[12][58];

    public static void main(String[] args) throws FileNotFoundException{

        File f = new File("Maze1.txt");
        Scanner sc = new Scanner(f);
        String mazeString = new Scanner( f ).useDelimiter("\\A").next();

        Stack<Point> points = new Stack<>();
        while(sc.hasNextLine()){
            mazeLocationPoints[][] = sc.nextLine().toCharArray();
            points.push(mazeLocations);


        }

    }

}

我不知道如何从迷宫位置创建点数。?

给定的迷宫是12 x 58,我已经转换为字符串,但是我该如何为每个位置(char)分配一个点(x,y)值?我知道底部是错误的,它只是为了展示我想做的事情。

迭代维度:

    import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import java.util.Stack;
import java.awt.Point;


public class MazeExplorer {
    public static int x;
    public static int y;

    final static int mazeHeight = 12;
    final static int mazeWidth = 58;
    public static char[][] mazePoints = new char[12][58];

    public static void main(String[] args) throws FileNotFoundException{

        File f = new File("Maze1.txt");
        Scanner sc = new Scanner(f);
        String mazeString = new Scanner( f ).useDelimiter("\\A").next();

        Stack<Point> points = new Stack<>();

        for(int i = 0; i < mazeHeight; i++){
            for(int j = 0; j < mazeWidth; j++){
                mazePoints[i][j] = 
            }

        }

    }

}

1 个答案:

答案 0 :(得分:0)

首先,您应该使用您声明的静态整数初始化mazePoints数组:

public static char[][] mazePoints = new char[mazeHeight][mazeWidth];

但是你需要首先将它们标记为静态:

private static final int mazeHeight = 12;
private static final int mazeWidth = 58;

如果它们不是静态的,那么你的mazePoints数组也不应该。

接下来,您应该逐行阅读文件,而不是一次阅读整个文件:

final Scanner scanner = new Scanner(f);

for (int row = 0; row < mazeHeight && scanner.hasNext(); row++) {
    final String mazeRow = scanner.next(); //Get the next row from the scanner.
    mazePoints[row] = mazeRow.toCharArray(); //Convert the row into a char[].
}

你已经完成了。您现在拥有mazePoints所有积分。

注意 您使用的new Scanner(f).useDelimiter("\\A").next();只是更改默认分隔符,以便一次读取整个文件。你不希望这种行为。使用一次读取一行的默认行为。

您可以盲目地遍历整个2D数组,但是,您可能需要实现某种类型的算法,而不是迭代整个2D数组。

for (int y = 0; y < mazeHeight; y++) {
    for (int x = 0; x < mazeWidth; x++) {
        Point point = new Point(x, y);
        //Do whatever with your point...
    }
}