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;
}
}

  

java使用链栈实现迷宫求解的更多相关文章

  1. java使用链栈实现数制转换

    java实现链栈在前面有所介绍:http://www.cnblogs.com/lixiaolun/p/4644141.html 将前面java实现链栈的代码稍作修改: package linkedst ...

  2. java与数据结构(6)---java实现链栈

    栈之链式存储结构链栈 链栈 栈的链式存储结构成为链栈.链栈是没有头结点,头结点就是栈顶指针top. 代码结构 package list; public interface Stackable;公共接口 ...

  3. 数据结构——Java实现链栈

    一.分析 栈是限定仅在表的一端进行插入或删除操作的线性表,对于栈来说,操作端称为栈顶,另一端则称为栈底,栈的修改是按照后进先出的原则进行的,因此又称为后进先出的线性表. 链栈是指采用链式存储结构实现的 ...

  4. java实现链栈

    package linkstack; /** * Created by Administrator on 2019/4/18. */ public class LinkStack { private ...

  5. 数据结构算法C语言实现(八)--- 3.2栈的应用举例:迷宫求解与表达式求值

    一.简介 迷宫求解:类似图的DFS.具体的算法思路可以参考书上的50.51页,不过书上只说了粗略的算法,实现起来还是有很多细节需要注意.大多数只是给了个抽象的名字,甚至参数类型,返回值也没说的很清楚, ...

  6. 顺序栈,链栈,队列java实现

    顺序栈 /** * 顺序栈 * */ public class SqStack { //栈的大小 private int maxSize; //栈顶指针 private int top; privat ...

  7. 个人项目Individual Project:迷宫求解

    源码的github链接:           https://github.com/zhangxue520/test 1.1问题描述: a.问题描述:以一个m * n的长方阵表示迷宫,0和1分别表示迷 ...

  8. Java实现链式存储的二叉树

    二叉树的定义: 二叉树(BinaryTree)是n(n≥0)个结点的有限集,它或者是空集(n=0),或者由一个根结点及两棵互不相交的.分别称作这个根的左子树和右子树的二叉树组成. 二叉树的遍历方式主要 ...

  9. 数据结构实验3:C++实现顺序栈类与链栈类

      实验3 3.1 实验目的 熟练掌握栈的顺序存储结构和链式存储结构. 熟练掌握栈的有关算法设计,并在顺序栈和链栈上实现. 根据具体给定的需求,合理设计并实现相关结构和算法.3.2实验要求3.2.1 ...

随机推荐

  1. 【转】全面了解Mysql中的事务

    为什么要有事务? 事务广泛的运用于订单系统.银行系统等多种场景.如果有以下一个场景:A用户和B用户是银行的储户.现在A要给B转账500元.那么需要做以下几件事: 1. 检查A的账户余额>500元 ...

  2. java 接口 继承 接口 抽象类 继承 实体类

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha 接口 可以 继承 接口 抽象类 可以 实现 接口 抽象类 继承实体类 需要 实体类 有 ...

  3. [CodeForces-513E2]Subarray Cuts

    题目大意: 给你一个数列,从中选出k个互不重叠的非空子串,定义s[i]为第i个子串的和,求|s[1]-s[2]|+|s[2]-s[3]|+...+|s[k-1]-s[k]|的最大值. 思路: 考虑将绝 ...

  4. Java并发(九):重入锁 ReentrantLock

    先做总结: 1.为什么要用ReentrantLock? (1)ReentrantLock与synchronized具有相同的功能和内存语义: (2)synchronized是重量级锁,性能不好.Ree ...

  5. [转]Android Studio开发入门-引用jar及so文件

    注意: 1.jar包在app的libs目录 2.so文件放在src/main”目录中名为“jniLibs”的目录 一.引用jar文件    1.将jar文件复制.粘贴到app的libs目录中:    ...

  6. April Fools Day Contest 2016 D. Rosetta Problem

    D. Rosetta Problem 题目连接: http://www.codeforces.com/contest/656/problem/D Description ++++++++[>+& ...

  7. VK Cup 2016 - Round 1 (Div. 2 Edition) C. Bear and Forgotten Tree 3 构造

    C. Bear and Forgotten Tree 3 题目连接: http://www.codeforces.com/contest/658/problem/C Description A tre ...

  8. SDRAM interface slashes pin count

    Many designs need deep buffering but don't require ultrahigh-memory bandwidth. Examples include imag ...

  9. CMOS DACs act as digitally controlled voltage dividers

    Digital potentiometers, such as Analog Devices’ AD5160, make excellent digitally controlled voltage ...

  10. php中的var_dump()方法的详细说明

    首先看看实例: <?PHP$a = "alsdflasdf;a";$b = var_dump($a);echo "<br>";//var_du ...