迷宫问题 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();
}
}
}
运行结果如图:
迷宫问题 java 队列_利用队列解决迷宫问题相关推荐
- Java多线程_阻塞队列
1.什么是阻塞队列 我们知道,PriorityQueue.LinkedList这些都是非阻塞队列.在我们使用非阻塞队列的时候有一个很大问题,它不会对当前线程产生阻塞,那么在面对类似消费者 ...
- rabbitmq导出队列_消息队列BCMQ在大云运维管理平台BCDeepWatch中的应用
友情提示:全文约2600字,预计阅读时间12分钟 摘要 消息队列作为重要的中间件,广泛用于分布式系统中各子系统间的异步解耦:本文主要介绍了大云消息队列中间件BC-MQ在BC-DeepWatch中的应用 ...
- java 递归_采用递归算法求解迷宫问题(Java版) | 附代码+视频
递归算法能够解决很多计算机科学问题,迷宫问题就是其中一个典型案例.本篇教程我们将采用递归算法求解迷宫问题,输出从入口到出口的所有迷宫路径. 01 用递归算法解决迷宫问题 迷宫问题在<数据结构教程 ...
- 用js写出数据结构中的自定义队列,利用队列思想写出一个击鼓传花的游戏函数,优先级队列
队列的核心是先进先出 1.用js写出数据结构中的自定义队列 class Queue{constructor(){this.item = [];}// 1.入队enqueue(ele){this.ite ...
- 队列和消息队列_消息队列概述[幻灯片]
队列和消息队列 昨天,我进行了一次演讲,探讨了使用消息队列的所有方面. 我以前曾写过"您可能不需要消息队列" –现在的结论有些细微差别,但我仍然坚持简单性的观点. 演讲探讨了使用消 ...
- winsock使用java编写_利用Socket进行Java网络编程(一)
利用Socket进行Java网络编程(一) 考试吧(Exam8.com) 2003-03-04 08:00:00 评论(0)条 作者: 郗旻 Socket是网络上运行的两个程序间双向通讯的一端,它既可 ...
- java栈 迷宫_利用栈实现迷宫的求解
问题描述:这时实验心理学中的一个典型的问题,心理学家吧一只老鼠从一个无顶的大盒子的入口处赶进迷宫.迷宫设置很多隔壁,对前进方向形成了许多障碍,心理学家在迷宫的唯一出口处放置了一块奶酪,吸引老鼠仔迷宫中 ...
- java多线程阻塞队列_阻塞队列和多线程消费者,如何知道何时停止
我有一个单线程生成器,它创建一些任务对象,然后添加到 ArrayBlockingQueue (具有固定大小) . 我也开始了一个多线程的消费者 . 这是一个固定的线程池( Executors.newF ...
- C++建立队列_利用链表
// c++ 实现链表队列 // .h 文件 // 文件名: Queue.h //------------------------------------------------- #pragma o ...
最新文章
- 使用 Gitlab 进行嵌入式软件开发技巧
- this.name=name;和this.setName(name);的区别
- 阻塞队列之七:DelayQueue延时队列
- 将node.js程序作为服务,并在windows下开机自动启动(使用forever)
- 数据来源渠道及采集工具_【公示公告】涡阳县村级光伏扶贫电站数据采集器更换采购安装项目单一来源采购标前公示...
- DHCP中继原理和配置(含常见配置配置误区)
- 南阳理工acm括号配对问题
- Linux下Docker命令自动补全
- 如何快速解决office2016每次打开都需要配置修复的问题,其他回答都是屁
- OSChina 周四乱弹 —— 你从小继承了程序员基因
- 学习《医学三字经白话解》之气喘
- Echarts图表之南丁格尔图
- qq空间个人档html代码,QQ空间如何进行个人档管理?
- 考拉情书---一片道歉叶
- java-php-python-ssm网课信息管理系统计算机毕业设计
- 【徐禾 政治经济学概论】 读书笔记 §1.3劳动的二因素:具体劳动和抽象劳动(上.价值质的规定性)
- 130 余个相见恨晚的超实用网站!果断保存!!!
- 从MBD到MBE的战略转型路径
- 解决:利用IDEA的右上角图标打开jsp文件
- 电子科大计算机复试c语言复试题目,电子科大计算机的复试之路_跨考网