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. 剖析ironic

    关键技术 在安装操作系统时需要存储介质来存储系统镜像.需要控制物理机开关机,在网络部署环境中还需要预启动环境. PXE (预启动环境) IPMI(电源管理) iSCSI(存储) 什么是PXE PXE( ...

  2. BZOJ1016 JSOI2008最小生成树计数

    定理,在所有最小生成树中,相同边权的边出现的次数相同. 由于重复边权小于10条,可以跑2^10暴力 #include<bits/stdc++.h> using namespace std; ...

  3. python3-开发进阶Flask的基础(4)

    今日内容: 上下文管理:LocalProxy对象 上下文管理:  请求上下文: request/session   app上下文:app/g 第三方组件:wtforms       1.使用      ...

  4. php回溯

    $sl = debug_backtrace(); 返回的$sl 是一个二维数组 包含如下元素: function string 当前的函数名,参见: __FUNCTION__. line intege ...

  5. 基础知识(09) -- Spring 概述

    Spring概述-------------------------------------------------------------------------主要内容: 1.Spring是什么 2 ...

  6. JVM堆内存的分代

    虚拟机的堆内存共划分为三个代:年轻代(Young Generation).年老代(Old Generation)和持久代(PermanentGeneration).其中持久代主要存放的是Java类的类 ...

  7. 设计模式 - 观察者模式(Observer Pattern) Java内置 用法

    观察者模式(Observer Pattern) Java内置 用法 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26601659 ...

  8. 东东糖博客MYSQL

    http://blog.chinaunix.net/uid-20785090-id-4328033.html

  9. Starling 2D框架简介(一)

    本系列是对Introducing Starling pdf的翻译,下文是对adobe开发人员中心的一片日志的转载,地址为http://www.adobe.com/cn/devnet/flashplay ...

  10. 第十二章 Openwrt无法识别2.0 USB 盘

    今天新的U盘不能识别,还以为是U盘本身的问题,原来是缺少 kmod-usb-storage kmod-usb-storage-extras 这两个软件包. 软件包安装后重启便可识别.