java使用链栈实现迷宫求解

简介: java实现链栈在前面有所介绍:http://www.cnblogs.com/lixiaolun/p/4644141.html   java实现链栈的代码: package stackapplication; public class LinkStack { private...

java实现链栈在前面有所介绍:http://www.cnblogs.com/lixiaolun/p/4644141.html

 

java实现链栈的代码:

package stackapplication;

public class LinkStack {
	
	private Element base;
	private Element top;
	
	class Element
	{
		public Step data;
		public Element next;
	}
	
	/**
	 * 初始化栈
	 * */
	public void initStack()
	{
		top = new Element();
		base = new Element();
		top.data=null;
		top.next=base;
		base.data=null;
		base.next=null;
	}
	
	/**
	 * 入栈
	 * */
	public void push(Step o)
	{
		Element e = new Element();
		e.data = o;
		if(top.next==base)//第一次入栈操作
		{
			e.next=base;
			top.next=e;
		}else
		{
			e.next=top.next;
			top.next=e;
		}
		
	}
	
	/**
	 * 出栈
	 * */
	public Step pop()
	{
		Step o = null;
		if(top.next==base)
		{
			System.out.println("栈中没有元素!");
			return o;
		}else
		{
			o = top.next.data;
			//System.out.println("出栈操作"+o);
			top.next=top.next.next;
		}
		return o;
	}
	/**
	 * 判断栈是否为空
	 * */
	public Boolean isEmpty()
	{
		if(top.next==base)
		{
			return true;
		}
		return false;
	}
	/**
	 * 打印栈
	 * */
	public void print()
	{
		System.out.print("打印栈:");
		Element temp =top;
		while(temp.next!=base)
		{
			System.out.print(temp.next.data+"\t");
			temp =temp.next;
		}
		System.out.println();
	}
}

java实现迷宫求解的类代码:

package stackapplication;


public class Maze {

	public static void main(String[] args) {
		
		int [][]map={
				{1,1,1,1,1,1,1,1,1,1},
				{1,0,0,1,0,0,0,1,0,1},
				{1,0,0,1,0,0,0,1,0,1},
				{1,0,0,0,0,1,1,0,0,1},
				{1,0,1,1,1,0,0,0,0,1},
				{1,0,0,0,1,0,0,0,0,1},
				{1,0,1,0,0,0,1,0,0,1},
				{1,0,1,1,1,0,1,1,0,1},
				{1,1,0,0,0,0,0,0,0,1},
				{1,1,1,1,1,1,1,1,1,1}
		};//入口在map[1][1],出口在map[8][8]
		
		int [][]move={{0,-1},{0,1},{-1,0},{1,0}};//上下左右四个移动方向
		LinkStack s = new LinkStack();
		s.initStack();
		LinkStack s1 = new LinkStack();
		s1.initStack();
		path(map,move,s,s1);
		
		while(!s1.isEmpty())
		{
			Step step = s1.pop();
			System.out.println("("+step.x+","+step.y+")");
		}
	}

	private static int path(int[][] map, int[][] move,LinkStack s,LinkStack s1) {
		Step step = new Step(1, 1, -1);//起始位置
		//map[1][1]=-1;//表示已走过该点
		s.push(step);
		s1.push(step);
		while(!s.isEmpty())
		{
			step=s.pop();
			int x=step.x;
			int y=step.y;
			int d=step.d+1;
			while(d<4)
			{
				
				int i=x+move[d][0];
				int j=y+move[d][1];
				if(map[i][j]==0 && i>=0 && i<10 && j>=0 &&j<10)//该位置是通的,且不越界
				{
					System.out.println(i+","+j);
					step = new Step(x, y, d);
					s.push(step);//将当前位置压入栈顶
					s1.push(step);
					
					step = new Step(i, j, d);
					s.push(step);//将当前位置压入栈顶
					s1.push(step);
					x=i;
					y=j;
					map[x][y]=-1;//表示已走过该点
					
					if(x==8 && y==8)//到达出口
					{
						System.out.println("到达出口");
						return 1;
					}else
					{
						d=0;//到达一个新的点,所以要从新初始化方向,遍历其4个方向是否是通的
					}
				}else
				{
					d++;//下一个方向
				}
			}
		}
		return 0;
	}	
}

class Step
{
	int x;//横坐标
	int y;//纵坐标
	int d;//移动方向,取值为0,1,2,3。分别表示上下左右4个方向。
	
	public Step(int x,int y,int d)
	{
		this.x=x;
		this.y=y;
		this.d=d;
	}
}

  

目录
相关文章
|
11月前
|
定位技术
Java-老鼠出迷宫(递归)
Java-老鼠出迷宫(递归)
60 0
|
3月前
|
Java
迷宫回溯(java)
迷宫回溯(java)
|
3月前
|
XML Java 数据格式
走出Java资源加载的迷宫
走出Java资源加载的迷宫
19 0
|
3月前
|
Java
P9242 [蓝桥杯 2023 省 B] 接龙数列JAVA,边权为1的最短路问题,洛谷P9242 [蓝桥杯 2023 省 B] 接龙数列​编辑力扣1926.迷宫离入口最近的出口力扣433.
P9242 [蓝桥杯 2023 省 B] 接龙数列JAVA,边权为1的最短路问题,洛谷P9242 [蓝桥杯 2023 省 B] 接龙数列​编辑力扣1926.迷宫离入口最近的出口力扣433.
|
Java
Java 实现汉字按照首字母分组排序
Java 实现汉字按照首字母分组排序
681 0
|
Java 数据安全/隐私保护
JAVA 实现上传图片添加水印(详细版)(上)
JAVA 实现上传图片添加水印(详细版)
1186 0
JAVA 实现上传图片添加水印(详细版)(上)
|
网络协议 Java
Java网络编程:UDP/TCP实现实时聊天、上传图片、下载资源等
ip地址的分类: 1、ipv4、ipv6 127.0.0.1:4个字节组成,0-255,42亿;30亿都在北美,亚洲就只有4亿 2011年就用尽了。
Java网络编程:UDP/TCP实现实时聊天、上传图片、下载资源等
|
算法 Java 程序员
详解Java递归(Recursion)通过递归解决迷宫回溯及八皇后问题
详解Java递归(Recursion)通过递归解决迷宫回溯及八皇后问题
20464 0
详解Java递归(Recursion)通过递归解决迷宫回溯及八皇后问题
|
Java
Java实现拼图小游戏(7)——查看完整图片(键盘监听实例2)
由于在移动和图片中我们已经添加了键盘监听,也继承了键盘监听的接口,那么我们只需要在重写方法内输入我们的代码即可
204 0
|
存储 Java
Java实现图书管理系统
本篇文章是对目前Java专栏已有内容的一个总结练习,希望各位小主们在学习完面向对象的知识后,可以阅览本篇文章后,自己也动手实现一个这样的demo来加深总结应用已经学到知识并进行巩固。
403 0
Java实现图书管理系统