您的位置:首页 > 其它

利用队列解决迷宫问题

2017-05-16 12:43 447 查看
  首先定义节点的数据类型:

//定义节点的数据结构
class Node{
int x;
int y;
Node next;
public Node(int x,int y) {
// TODO Auto-generated constructor stub
this.x=x;
this.y=y;
this.next=null;
}
}


  建立一个记录轨迹的类,完成节点的插入与删除工作:

package com.gqx.maze;
/**
* 记录老鼠走迷宫的路径
* @author 郭庆兴
*
*/

public class TraceRecord {
public Node first;
public Node last;
public boolean isEmpty(){
return first==null;
}
public void insert(int x,int y){
Node newNode=new Node(x, y);
if (this.isEmpty()) {
first=last=newNode;
}else {
last.next=newNode;
last=newNode;
}
}

public void delete(){
Node newNode;
if (this.isEmpty()) {
System.out.println("队列已经空了!/n");
return;
}
newNode=first;
while (newNode.next!=last) {
newNode=newNode.next;
}
newNode.next=last.next;
last=newNode;
}
}


  写一个主程序,在一个已知的迷宫中去完成路径的遍历(其中‘1’代表障碍物,‘0’代表道路可行,2代表老鼠的轨迹路线):

package com.gqx.maze;

public class MazeMain {
//定义出口的坐标
private static int exit_X=8;
private static int exit_Y=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,1,1,0,1,1},
{1,1,1,0,1,1,0,0,0,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) {
// TODO Auto-generated method stub
int i,j,x=1,y=1;
TraceRecord path=new TraceRecord();
System.out.println("迷宫的地图如下:");
for (i = 0; i < 10;i ++) {
for (j = 0; j < 12 ;j++){
System.out.print(maze[i][j]);
}
System.out.println();
}
while (x<=exit_X && y<=exit_Y) {
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 (x==exit_X && y==exit_Y) {
break;
}
else {
maze[x][y]=2;
path.delete();
x=path.last.x;
y=path.last.y;
}
}
System.out.println("老鼠走过的路径是:");
for (i = 0; i < 10; i++) {
for (j = 0; j < 12; j++) {
System.out.print(maze[i][j]);
}
System.out.println();
}
}
}


运行结果如图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: