欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

java棧和隊列實現迷宮代碼

錢旭東1年前7瀏覽0評論

棧和隊列是java編程中常用的數據結構,在迷宮問題中也可以被應用。這里講解如何使用棧和隊列實現迷宮代碼。

首先需要定義一個迷宮類Maze,該類主要包括迷宮地圖的構建以及尋找路徑的方法。迷宮地圖可以用二維數組表示,其中0表示可以通行的路,1表示障礙物??梢栽跇嬙旌瘮抵袀魅胍粋€二維數組作為迷宮地圖。

public class Maze {
private int[][] map;
public Maze(int[][] map) {
this.map = map;
}
}

接下來就是尋找路徑的方法。由于使用棧和隊列都可以實現,這里選用隊列實現。首先定義一個Point類,用于存儲每個點的坐標。然后定義一個隊列表示需要走的所有點,以及定義一個visited數組表示該點是否已經走過。

public class Point {
int x;
int y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
}
public void findPath() {
Queuequeue = new LinkedList<>();
boolean[][] visited = new boolean[map.length][map[0].length];
}

接下來就是不斷取隊列中的點,進行廣度優先搜索。對于每個點,先判斷是否到達終點,如果是則返回路徑;否則判斷該點是否可走且未走過,如果是則將該點加入隊列中,并將該點標記為已走過。

public void findPath() {
Queuequeue = new LinkedList<>();
boolean[][] visited = new boolean[map.length][map[0].length];
Point start = new Point(0, 0);
Point end = new Point(map.length - 1, map[0].length - 1);
queue.offer(start);
visited[start.x][start.y] = true;
while (!queue.isEmpty()) {
Point cur = queue.poll();
if (cur.x == end.x && cur.y == end.y) {
//到達終點,返回路徑
} else {
if (cur.x - 1 >= 0 && map[cur.x - 1][cur.y] == 0 && !visited[cur.x - 1][cur.y]) {
Point next = new Point(cur.x - 1, cur.y);
//入隊并標記為已走過
}
if (cur.x + 1< map.length && map[cur.x + 1][cur.y] == 0 && !visited[cur.x + 1][cur.y]) {
Point next = new Point(cur.x + 1, cur.y);
//入隊并標記為已走過
}
if (cur.y - 1 >= 0 && map[cur.x][cur.y - 1] == 0 && !visited[cur.x][cur.y - 1]) {
Point next = new Point(cur.x, cur.y - 1);
//入隊并標記為已走過
}
if (cur.y + 1< map[0].length && map[cur.x][cur.y + 1] == 0 && !visited[cur.x][cur.y + 1]) {
Point next = new Point(cur.x, cur.y + 1);
//入隊并標記為已走過
}
}
}
}

最后實現返回路徑的方法。可以使用一個HashMap來存儲每個點的前驅節點,從終點開始回溯到起點。

public ListgetPath(Point start, Point end, HashMapmap) {
Listpath = new ArrayList<>();
Point cur = end;
while (!cur.equals(start)) {
path.add(cur);
cur = map.get(cur);
}
path.add(start);
Collections.reverse(path);
return path;
}

至此,使用隊列實現迷宮代碼的方法已經完成。