DFS算法简化至27行
走迷宫从左上角出发,右下角为出口
源代码:
import java.util.Arrays;
public class DFS {
static int N = 8;
static int H[] = { 1, 0, -1, 0 }, V[] = { 0, 1, 0, -1 };
static char Maze[][] = {
{ 'O', 'X', 'X', 'X', 'X', 'X', 'X', 'X' }, { 'O', 'O', 'O', 'O', 'O', 'X', 'X', 'X' },
{ 'X', 'O', 'X', 'X', 'O', 'O', 'O', 'X' }, { 'X', 'O', 'X', 'X', 'O', 'X', 'X', 'O' },
{ 'X', 'O', 'X', 'X', 'X', 'X', 'X', 'X' }, { 'X', 'O', 'X', 'X', 'O', 'O', 'O', 'X' },
{ 'X', 'O', 'O', 'O', 'O', 'X', 'O', 'O' }, { 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'O' } };
public static void main(String args[]) {
find(0, 0);
}
static void find(int x, int y) {
if (x == N - 1 && y == N - 1) {
Maze[x][y] = '*';
for (int k = 0; k < N; k++)
System.out.println(Arrays.toString(Maze[k]));
return;
}
for (int k = 0; k < 4; k++)
if (x >= 0 && x < N && y >= 0 && y < N && Maze[x][y] == 'O') {
Maze[x][y] = '*';
find(x + H[k], y + V[k]);
Maze[x][y] = 'O';
}
}
}
运行结果: