利用隊列解決迷宮問題


  首先定義節點的數據類型:

//定義節點的數據結構
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();
		}
	}
}

 運行結果如圖:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM