zoukankan      html  css  js  c++  java
  • 利用队列解决迷宫问题

      首先定义节点的数据类型:

    //定义节点的数据结构
    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();
    		}
    	}
    }
    

     运行结果如图:

  • 相关阅读:
    刷脸支付真的来啦!华为nova3带你玩转酷时代~
    华为nova3发布,将支持华为AI旅行助手
    华为nova3超级慢动作酷玩抖音,没有办法我就是这么强大!
    Duang,HUAWEI DevEco IDE全面升级啦
    HUAWEI HiAI亮相Droidcon柏林2018开发者峰会 开启HiAI海外生态
    华为快应用引擎架构及开发实践
    C#怎样从指定服务器上下载指定文件到本地电脑上
    史上最全的Android的Tab与TabHost讲解
    Android Browser学习二 BrowserActivity 的初始化 --其他重要模块
    Android Browser学习一 application的初始化
  • 原文地址:https://www.cnblogs.com/helloworldcode/p/6860776.html
Copyright © 2011-2022 走看看