代码:

class Position{int x;int y;public Position(int x,int y){this.x=x;this.y=y;}
}
// 迷宫寻路
public class Maze{private int size;private int[][] matrix;// 代表迷宫的二维数组,0表示通路/*** 构建迷宫* 迷宫的左上角为入口,右下角为出口* @param size 二维数组的边长* @param percent 可通过区域占整体的比例 */public void build(int size,double percent){this.size=size;matrix=new int[size][size];for(int i=0;i<size;i++){for(int j=0;j<size;j++){double seed=Math.random();if(seed>percent){matrix[i][j]=0;}else{matrix[i][j]=1;}}}// 入口出口不能堵死matrix[0][0]=0;matrix[size-1][size-1]=0;}// 打印迷宫public void displayMatrix(){for(int i=0;i<size;i++){for(int j=0;j<size;j++){if(matrix[i][j]==0){System.out.print("☆");// 可通过区域}else if(matrix[i][j]==1){System.out.print("★");// 不可通过区域}else if(matrix[i][j]==2){System.out.print("⊙");// 路径
                }}System.out.println();}}// 寻找迷宫出路public boolean findPath(){// 暂存matrixint[][] arr=new int[size][size];for(int i=0;i<size;i++){for(int j=0;j<size;j++){arr[i][j]=matrix[i][j];}}//  用于记住路径的栈Stack<Position> stack=new Stack<Position>(Position.class,size*size);matrix[0][0]=1;Position curr=new Position(0,0);stack.push(curr);while(curr.x!=size-1 || curr.y!=size-1){Position next=getWayout(curr);if(next!=null){stack.push(curr);matrix[next.x][next.y]=1;curr=next;}else{if(stack.isEmpty()){return false;}else{curr=stack.pop();}}}// matrix 取回原值for(int i=0;i<size;i++){for(int j=0;j<size;j++){matrix[i][j]=arr[i][j];}}// 栈内容while(stack.isEmpty()==false){Position pos=stack.pop();matrix[pos.x][pos.y]=2;}matrix[size-1][size-1]=2;// 最终到达右下角return true;}// 取得临近能出去的点private Position getWayout(Position currPos){// 右if(currPos.x+1<size && matrix[currPos.x+1][currPos.y]==0){return new Position(currPos.x+1,currPos.y);}// 下if(currPos.y+1<size && matrix[currPos.x][currPos.y+1]==0){return new Position(currPos.x,currPos.y+1);}// 左if(0<currPos.x-1 && matrix[currPos.x-1][currPos.y]==0){return new Position(currPos.x-1,currPos.y);}// 上if(0<currPos.y-1 && matrix[currPos.x][currPos.y-1]==0){return new Position(currPos.x,currPos.y-1);}return null;}public static void main(String[] args){Maze m=new Maze();m.build(10, 0.3);System.out.println("迷宫图示");m.displayMatrix();boolean f=m.findPath();if(f){System.out.println("迷宫走得通,下图圆点为路径");m.displayMatrix();}else{System.out.println("迷宫走不通");}}
}

输出之一:

迷宫图示
☆☆★☆☆☆☆★☆★
☆☆☆☆☆☆☆☆☆☆
☆★☆☆☆★☆☆★☆
☆☆★☆☆★☆★☆☆
☆☆☆★★☆★☆☆★
☆☆☆☆★☆★☆☆☆
★★☆☆☆☆☆☆★☆
☆☆☆☆☆☆☆☆☆★
☆☆★★★☆☆★★☆
☆☆★★☆☆☆☆☆☆
迷宫走得通,下图圆点为路径
⊙☆★☆☆☆☆★☆★
⊙☆☆☆☆☆☆☆☆☆
⊙★☆☆☆★☆☆★☆
⊙☆★☆☆★☆★☆☆
⊙☆☆★★☆★☆☆★
⊙⊙⊙☆★☆★☆☆☆
★★⊙☆☆☆☆☆★☆
☆☆⊙⊙⊙⊙☆☆☆★
☆☆★★★⊙☆★★☆
☆☆★★☆⊙⊙⊙⊙⊙

输出之二:

迷宫图示
☆☆☆☆★☆☆☆★☆
☆★☆★★★☆☆☆★
★☆☆☆☆☆☆☆☆☆
☆☆☆☆☆★☆☆☆☆
★☆☆☆★☆★★★★
☆☆☆☆★★☆☆★☆
★☆☆★☆☆★☆☆★
☆☆☆☆☆☆☆☆☆☆
☆☆☆★☆☆★☆★★
☆☆★★☆☆☆★☆☆
迷宫走不通

爪哇国新游记之二十六----迷宫寻路相关推荐

  1. 爪哇国新游记之二十四----二叉树

    /*** 二叉树节点类* */ class Node<T extends Comparable> {public Node(T data){this.data=data;}T data;N ...

  2. 爪哇国新游记之二十八----从url指定的地址下载文件到本地

    package download;import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; i ...

  3. 爪哇国新游记之二十五----图及其遍历查找

    代码: import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; import java. ...

  4. 爪哇国新游记之二十九----访问URL获取输入流

    代码: import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileWriter; import ...

  5. 爪哇国新游记之二十一----快算24

    四张牌,通过四则运算得到24,一个数限用一次,快者为胜. 代码: import java.util.ArrayList; import java.util.HashSet; import java.u ...

  6. 爪哇国新游记之十六----泛型单链表类

    /*** 单链表节点类* @param <T>*/ class Node<T extends Object>{protected T value;protected Node ...

  7. 爪哇国新游记之三十二----邮件发送

    由三个类完成任务,第一个为主,main中是用法示例. 纯邮件发送和带附件发送邮件皆可,大家请参照main函数中用法. package com.ufo.util.mail;import java.uti ...

  8. 爪哇国新游记之十五----泛型动态数组类

    import java.lang.reflect.Array;/*** 泛型动态数组类**/ public class DynamicArray<T extends Object>{pri ...

  9. 爪哇国新游记之十八----泛型栈类

    import java.lang.reflect.Array;/*** 泛型栈** @param <T>*/ public class Stack<T>{private Cla ...

最新文章

  1. cnn stride and padding_卷积神经网络(CNN) 第 4 课(上)
  2. react-native 环境配置遇到的问题
  3. Java面向对象的程序设计
  4. Selenium-IDE脚本录制,selenium-side-runner自动化测试教程
  5. 根据开始日期和结束日期获取基金的当天净值,并计算收益率
  6. 谈谈前端包管理工具 npm yarn pnpm
  7. SecureCRT的下载、安装、使用( 过程非常详细~)
  8. linux qt socket编程视频教程,Qt视频教程第二十八集socket之UDP
  9. TCL电视禁止第三方安装软件?如何远程给安卓智能电视强制安装安卓所有软件?
  10. 高数笔记(六):拉格朗日中值定理,柯西中值定理,洛必达法则,泰勒定理
  11. 运动模糊(MotionBlur)
  12. AI绘画是什么软件?看完你就知道了
  13. Chapter 5. Monte Carlo Methods
  14. 无边界安全成新趋势,志翔科技推出首个体系化“无边界”安全产品
  15. 你看好我国网约车生态吗?
  16. (转)ubuntu个人桌面使用经验
  17. 桌面端编程之C++语言的知识架构
  18. Bootstrap table设置列宽和固定表头
  19. java基于ssm的酒店管理系统
  20. 【西安】SWAT模型高阶十七项案例分析

热门文章

  1. 【Java】springboot学习笔记二
  2. 【maven】maven的介绍
  3. app测试的过程和重点关注内容
  4. JMETER 分布式踩过的坑及填坑方法
  5. Servlet destroy()回收机制
  6. php webwxuploadmedia_PHP Web实现文件上传下载功能实例解析
  7. android中屏保功能项目,【Android】一段时间不操作弹出【屏保】效果
  8. linux网络安装gtk2,(一) linux 下gtk2,python的安装
  9. java邮件附件名称乱码_Javamail 中附件中文名字乱码祥解 (转)
  10. 虚拟网站禁用php,虚拟主机php程序fsockopen函数被禁用