这里说一下简单的迷宫问题,老鼠如何在迷宫中起点走到终点,一个二位数组MAZE[][]表示迷宫,MAZE[i][j]=1表示此处有墙,MAZE[i][j]=0表示无墙(可以通过),老鼠走过的路线就将其对应值设置为2,这里提供了一个起点(1,1)和终点(8,10),数组内容如下:
上代码!(这里其实没什么智能性,就像是无头苍蝇一样一直撞到出口)
记录老鼠走过的路径
public class TraceRecord {
public Node first;
public Node last;
public boolean isEmpty() {
return first==null;
}
public void insert(int x, int y) {
Node node = new Node(x, y);
if(isEmpty()) {
first = node;
last = node;
}
else {
last.next = node;
last = node;
}
}
public void delete() {
Node node;
if(isEmpty()) {
System.out.println("【队列已经空了】");
return;
}
node = first;
while (node.next != last) {
node = node.next;
}
node.next = last.next;
last = node;
}
class Node {
int x;
int y;
Node next;
public Node(int x, int y) {
this.x = x;
this.y = y;
this.next = null;
}
}
}
老鼠走迷宫
public class Maze {
//出口坐标
public static int ExitX = 8;
public static int ExitY = 10;
//迷宫
public static int[][] MAZE = {
{1,1,1,1,1,1,1,1,1,1,1,1},
{1,0,0,0,1,1,1,1,1,1,1,1},
{1,1,1,0,1,1,0,0,0,0,1,1},
{1,1,1,0,1,1,0,1,1,0,1,1},
{1,1,1,0,0,0,0,1,1,0,1,1},
{1,1,1,0,1,1,0,1,1,0,1,1},
{1,1,1,0,1,1,0,1,1,0,1,1},
{1,1,1,1,1,1,0,1,1,0,1,1},
{1,1,0,0,0,0,0,0,1,0,0,1},
{1,1,1,1,1,1,1,1,1,1,1,1}
};
public static void main(String[] args) {
int i,j,x,y;
TraceRecord path = new TraceRecord();
//入口坐标 (开始坐标)
x=1; y=1;
System.out.println("【迷宫的路径(0的部分)】");
for (i=0;i<10;i++) {
for (j=0;j<12;j++) {
System.out.print(MAZE[i][j]);
}
System.out.println();
}
while(x<=ExitX && y<=ExitY) {
MAZE[x][y] = 2;
if(MAZE[x-1][y] == 0) {
x -= 1;
path.insert(x, y);
}
else if (MAZE[x+1][y] == 0) {
x += 1;
path.insert(x, y);
}
else if(MAZE[x][y-1] == 0) {
y -= 1;
path.insert(x, y);
}
else if(MAZE[x][y+1] == 0) {
y += 1;
path.insert(x, y);
}
else if (checkExit(x, y, ExitX, ExitY) == 1) {
break;
}
else {
MAZE[x][y] = 2;
path.delete();
x = path.last.x;
y = path.last.y;
}
}
System.out.println("【老鼠走过的路径(2的部分)】");
for(i=0;i<10;i++){
for(j=0;j<12;j++) {
System.out.print(MAZE[i][j]);
}
System.out.println();
}
}
public static int checkExit(int x, int y, int ex, int ey) {
if(x==ex && y==ey) {
if(MAZE[x-1][y]==1 || MAZE[x+1][y]==1 || MAZE[x][y-1]==1 || MAZE[x][y+1]==2)
return 1;
if(MAZE[x-1][y]==1 || MAZE[x+1][y]==1 || MAZE[x][y-1]==2 || MAZE[x][y+1]==1) {
return 1;
}
if(MAZE[x-1][y]==1 || MAZE[x+1][y]==2 || MAZE[x][y-1]==1 || MAZE[x][y+1]==1) {
return 1;
}
if(MAZE[x-1][y]==2 || MAZE[x+1][y]==1 || MAZE[x][y-1]==1 || MAZE[x][y+1]==1) {
return 1;
}
}
return 0;
}
}
运行结果,是可以看到走出的路线的(值为2的)