java迷宫算法继承_求Java关于迷宫的算法(用栈实现)
求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关于迷宫的算法(用栈实现)相关推荐
- 用java编写圆锥_求java大神帮忙 求大神帮助!Java
导航:网站首页 > 求java大神帮忙 求大神帮助!Java 求java大神帮忙 求大神帮助!Java 相关问题: 匿名网友: 普通类 public class CircularA { //求圆 ...
- java 的继承_关于java中的继承
我们都知道Java中的继承是复用代码.扩展子类的一种方式,继承使得Java中重复的代码能够被提取出来供子类共用,对于Java程序的性能以及修改和扩展有很大的意义,所以这是一个非常重要的知识点. 那么对 ...
- java案例源代码_求java案例源代码 越多越好!
展开全部 import java.awt.*; import java.awt.event.*; import java.lang.*; import javax.swing.*; public cl ...
- java日历记事本_求java实现日历记事本
import java.util.Scanner;/** * 实现日历的方法dayin * */public class printCalenderDemo {public static int ye ...
- java getclass() 继承_【java】继承和super.getClass()
一.先看问题 question:输出的结果是什么? package cn.wxy.extendsion; /** * 父类 * @author reliveIT */ public class Fat ...
- java 公历 农历_求JAVA农历转公历,公历转农历算法
public class Lunar { private int year; private int month; private int day; private boolean leap; fin ...
- java instanceof 继承_继承_instanceOf的使用
本阶段是进入"程序员"的门槛,需要学习编程8yt基本的知识:变量.数据类型.控制 语句.面向对象.我们通过实际的案例,让大家一开始就通过游戏项目进入学习状态,寓教 于乐,引起大家的 ...
- java 子类 复制_关于java子类继承来的属性与方法究竟是完全复制还是共用使用...
关于java子类继承来的属性与方法究竟是完全复制还是共用使用 关于java子类继承来的属性与方法究竟是完全复制还是共用使用 今天在学习java的面向对象时,无意间发现一个问题. public clas ...
- java大神请出来_求java大神,请分析以下代码,写出执行结果,并解释每行结果输出的原因。...
求java大神,请分析以下代码,写出执行结果,并解释每行结果输出的原因.classPlate{publicPlate(){System.out.println("inPlateconstru ...
- java中的多态与继承_【Java学习笔记之十六】浅谈Java中的继承与多态
1. 什么是继承,继承的特点? 子类继承父类的特征和行为,使得子类具有父类的各种属性和方法.或子类从父类继承方法,使得子类具有父类相同的行为. 特点:在继承关系中,父类更通用.子类更具体.父类具有更 ...
最新文章
- 委托(一个主窗体统计多个从窗体的按钮单击的次数)
- 面试官:因为这个语言,我淘汰了90%的人!!
- Linux 环境运维 - 查看远程调试端口被占用的ip地址,设置连接处于空闲状态快速自动化断开方法,keepalive机制相关说明
- umask及文件默认和原始权限说明
- python read函数_Python read()函数:读入指定长度的文本
- Nand Flash与Nor Flash
- Sentinel(十六)之AHAS Sentinel 控制台
- 课程学习:程序设计与算法
- 解析stm32的时钟
- wpf 使用位图画图为什么断断续续_WPF的未来是微软WinUi!
- 数据结构-栈2-链式存储
- 和朱晔一起复习Java并发(二):队列
- TensorFlow 2.0开发者预览版放出!上手尝鲜可以开始了
- SPOJ371 Boxes(最小费用最大流)
- 柳州计算机一级考试报名时间,2021计算机考试报名时间和考试时间
- 谷歌AI平均每天发表2篇论文!Jeff Dean执笔年度汇总:16大方向
- 【论文解析】Intelligent Mediator-based Enhanced Smart Contract for Privacy Protection
- 散布谣言也能实现一致性?来看看Gossip协议如何活用六度分隔理论
- 电脑hosts文件位置
- 【PhD Debate - 14】将科幻照进现实——元宇宙数字人的当下与未来
热门文章
- Python3入门机器学习经典算法与应用 第3章 Numpy中的比较和FancyIndexing
- Processes and Threads 线程和进程的理解
- 190601每日一句
- 传智播客 C/C++学习笔记 const
- AR/MR研究团队和机构
- Atitit mybatis的扩展使用sql udf,js java等语言 目录 1.1. 默认,mybatis使用xml,sql等语言来书写业务流程	1 2. 使用java扩展函数	1 2.1.
- Atiitt 技术部的基本发展战略 attilax总结 艾龙 著 1. 战略的解释,即是 大概纲领与方法	1 2. 技术的基本战略是,培训,吸收与改造,recos,预研,技术储备	1 2.1.
- Atitit.编程语言and 自然语言的比较and 编程语言未来的发展
- paip.sqlite 管理最好的工具 SQLite Expert 最佳实践总结
- 你真的需要那么多报表么?| 专栏