求Java关于迷宫的算法(用栈实现)

关注:238  答案:1  mip版

解决时间 2021-02-02 11:37

提问者萌萌兔

2021-02-01 12:30

怎么找出下面迷宫的路径,并且将路径打印出来。用栈实现W代表墙,S开始点,F是终点,O是可以走得路不要网上的代码。我已经将下面的图存到char mazemap[12][58]中了谢谢各位了

最佳答案

二级知识专家寄出个心动

2021-02-01 13:47

package com.Albert.LabyringhStack;

public class Point {

int x;

int y;

int direction;   //direction指向此点附近的一个点 应该有四个 编号为1 2 3 4

public int getX() {

return x;

}

public void setX(int x) {

this.x = x;

}

public int getY() {

return y;

}

public void setY(int y) {

this.y = y;

}

public int getDirection() {

return direction;

}

public void setDirection(int direction) {

this.direction = direction;

}

public void addDirection(){

this.direction++;

}

public Point() {

}

public Point(int x, int y) {

super();

this.x = x;

this.y = y;

this.direction = 1;

}

public Point(int x, int y, int direction) {

super();

this.x = x;

this.y = y;

this.direction = direction;

}

}package com.Albert.LabyringhStack;

import java.util.*;

public class LabyringhStack {

public Point S;

public Point F;

char[][] mazemap;

Stack path;

public LabyringhStack() {

}

public LabyringhStack(char[][] ma) {        //初始化 存入数组

this.mazemap = new char[ma.length][ma[0].length];

for(int i=0;i

for(int j=0;j

this.mazemap[i][j] = ma[i][j];

}

}

S = returnPlace('S');

F = returnPlace('F');

}

public Point returnPlace(char s){      //返回数组中字符的位置

Point point = new Point();

for(int i=0;i

for(int j=0;j

if(this.mazemap[i][j]==s)

{   point.setX(i);

point.setY(j);

point.setDirection(1);

}

}

}

return point;

}

public char returnChar(Point point){

if(point.getX()>=0&&point.getY()>=0)

return this.mazemap[point.getX()][point.getY()];

else

return '#';

}

public void replacePlace(Point point, char s){  //更改特定位置处的字符

mazemap[point.getX()][point.getY()] = s;

}

public void printPath(){

Stack tempPath = new Stack();

while(!path.empty()){                                      //对栈进行反序

tempPath.push(path.pop());

}

while(!tempPath.empty()){

System.out.print("("+tempPath.peek().getX()+","+tempPath.pop().getY()+")");

}

}

public boolean getPath(){                   //取得路径的算法  如果有路径就返回真

path = new Stack();

S.setDirection(1);

path.push(S);

replacePlace(S, 'X');

while(!path.empty()){

Point nowPoint = path.peek();    //取得当前位置

if(nowPoint.getX()==F.getX()&&nowPoint.getY()==F.getY()){

//printPath();

return true;

}

Point temp = new Point();        //存放下一个可走的位置

int find = 0;                    //标志   是否可向下走

while(nowPoint.getDirection()<5&&find==0){

switch(nowPoint.getDirection()){

case 1:temp = new Point(nowPoint.getX(),nowPoint.getY()-1,1); break;  //取得当前位置左边的位置

case 2:temp = new Point(nowPoint.getX()+1,nowPoint.getY(),1); break;//取得当前位置下边的位置

case 3:temp = new Point(nowPoint.getX(),nowPoint.getY()+1,1); break;//取得当前位置右边的位置

case 4:temp = new Point(nowPoint.getX()-1,nowPoint.getY(),1); break;//取得当前位置上边的位置

}

nowPoint.addDirection();                    //指向下一个需要验证的点

if(returnChar(temp)=='O'||returnChar(temp)=='F') find = 1;    //如果能向下走则置为1

}

if(find==1){                                    //如果可走就进栈

replacePlace(temp, 'X');           //设置成X 防止回走

//printArr();

path.push(temp);

}else{                                         //如果不可走就退栈

replacePlace(nowPoint, 'O');

path.pop();

}

}

return false;

}

public void printArr(){

for(int i=0;i

for(int j=0;j

System.out.print(mazemap[i][j]);

}

System.out.println();

}

System.out.println();

}

}package com.Albert.LabyringhStack;

public class Main {

public static void main(String[] args) {

// TODO Auto-generated method stub

char[][] mazemap = {

{'M','M','M','M','M','M','M','M'},

{'M','S','O','O','M','M','M','M'},

{'M','M','M','O','M','M','M','M'},

{'M','M','O','O','O','O','M','M'},

{'M','M','M','M','M','F','M','M'},

{'M','M','M','M','M','M','M','M'},

{'M','M','M','M','M','M','M','M'}

};

LabyringhStack solution = new LabyringhStack(mazemap);

if(solution.getPath()){

System.out.print("迷宫路径如下:");

solution.printPath();

}

else {

System.out.println("没有可走的路");

}

}

}

我要举报

如以上问答内容为低俗/色情/暴力/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!

→点此我要举报以上信息!←

推荐资讯

大家都在看

java迷宫算法继承_求Java关于迷宫的算法(用栈实现)相关推荐

  1. 用java编写圆锥_求java大神帮忙 求大神帮助!Java

    导航:网站首页 > 求java大神帮忙 求大神帮助!Java 求java大神帮忙 求大神帮助!Java 相关问题: 匿名网友: 普通类 public class CircularA { //求圆 ...

  2. java 的继承_关于java中的继承

    我们都知道Java中的继承是复用代码.扩展子类的一种方式,继承使得Java中重复的代码能够被提取出来供子类共用,对于Java程序的性能以及修改和扩展有很大的意义,所以这是一个非常重要的知识点. 那么对 ...

  3. java案例源代码_求java案例源代码 越多越好!

    展开全部 import java.awt.*; import java.awt.event.*; import java.lang.*; import javax.swing.*; public cl ...

  4. java日历记事本_求java实现日历记事本

    import java.util.Scanner;/** * 实现日历的方法dayin * */public class printCalenderDemo {public static int ye ...

  5. java getclass() 继承_【java】继承和super.getClass()

    一.先看问题 question:输出的结果是什么? package cn.wxy.extendsion; /** * 父类 * @author reliveIT */ public class Fat ...

  6. java 公历 农历_求JAVA农历转公历,公历转农历算法

    public class Lunar { private int year; private int month; private int day; private boolean leap; fin ...

  7. java instanceof 继承_继承_instanceOf的使用

    本阶段是进入"程序员"的门槛,需要学习编程8yt基本的知识:变量.数据类型.控制 语句.面向对象.我们通过实际的案例,让大家一开始就通过游戏项目进入学习状态,寓教 于乐,引起大家的 ...

  8. java 子类 复制_关于java子类继承来的属性与方法究竟是完全复制还是共用使用...

    关于java子类继承来的属性与方法究竟是完全复制还是共用使用 关于java子类继承来的属性与方法究竟是完全复制还是共用使用 今天在学习java的面向对象时,无意间发现一个问题. public clas ...

  9. java大神请出来_求java大神,请分析以下代码,写出执行结果,并解释每行结果输出的原因。...

    求java大神,请分析以下代码,写出执行结果,并解释每行结果输出的原因.classPlate{publicPlate(){System.out.println("inPlateconstru ...

  10. java中的多态与继承_【Java学习笔记之十六】浅谈Java中的继承与多态

    1.  什么是继承,继承的特点? 子类继承父类的特征和行为,使得子类具有父类的各种属性和方法.或子类从父类继承方法,使得子类具有父类相同的行为. 特点:在继承关系中,父类更通用.子类更具体.父类具有更 ...

最新文章

  1. 委托(一个主窗体统计多个从窗体的按钮单击的次数)
  2. 面试官:因为这个语言,我淘汰了90%的人!!
  3. Linux 环境运维 - 查看远程调试端口被占用的ip地址,设置连接处于空闲状态快速自动化断开方法,keepalive机制相关说明
  4. umask及文件默认和原始权限说明
  5. python read函数_Python read()函数:读入指定长度的文本
  6. Nand Flash与Nor Flash
  7. Sentinel(十六)之AHAS Sentinel 控制台
  8. 课程学习:程序设计与算法
  9. 解析stm32的时钟
  10. wpf 使用位图画图为什么断断续续_WPF的未来是微软WinUi!
  11. 数据结构-栈2-链式存储
  12. 和朱晔一起复习Java并发(二):队列
  13. TensorFlow 2.0开发者预览版放出!上手尝鲜可以开始了
  14. SPOJ371 Boxes(最小费用最大流)
  15. 柳州计算机一级考试报名时间,2021计算机考试报名时间和考试时间
  16. 谷歌AI平均每天发表2篇论文!Jeff Dean执笔年度汇总:16大方向
  17. 【论文解析】Intelligent Mediator-based Enhanced Smart Contract for Privacy Protection
  18. 散布谣言也能实现一致性?来看看Gossip协议如何活用六度分隔理论
  19. 电脑hosts文件位置
  20. 【PhD Debate - 14】将科幻照进现实——元宇宙数字人的当下与未来

热门文章

  1. Python3入门机器学习经典算法与应用 第3章 Numpy中的比较和FancyIndexing
  2. Processes and Threads 线程和进程的理解
  3. 190601每日一句
  4. 传智播客 C/C++学习笔记 const
  5. AR/MR研究团队和机构
  6. Atitit mybatis的扩展使用sql udf,js java等语言 目录 1.1. 默认,mybatis使用xml,sql等语言来书写业务流程 1 2. 使用java扩展函数 1 2.1.
  7. Atiitt 技术部的基本发展战略 attilax总结 艾龙 著 1. 战略的解释,即是 大概纲领与方法 1 2. 技术的基本战略是,培训,吸收与改造,recos,预研,技术储备 1 2.1.
  8. Atitit.编程语言and 自然语言的比较and 编程语言未来的发展
  9. paip.sqlite 管理最好的工具 SQLite Expert 最佳实践总结
  10. 你真的需要那么多报表么?| 专栏