爪哇国新游记之二十六----迷宫寻路
代码:
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("迷宫走不通");}} }
输出之一:
迷宫图示 ☆☆★☆☆☆☆★☆★ ☆☆☆☆☆☆☆☆☆☆ ☆★☆☆☆★☆☆★☆ ☆☆★☆☆★☆★☆☆ ☆☆☆★★☆★☆☆★ ☆☆☆☆★☆★☆☆☆ ★★☆☆☆☆☆☆★☆ ☆☆☆☆☆☆☆☆☆★ ☆☆★★★☆☆★★☆ ☆☆★★☆☆☆☆☆☆ 迷宫走得通,下图圆点为路径 ⊙☆★☆☆☆☆★☆★ ⊙☆☆☆☆☆☆☆☆☆ ⊙★☆☆☆★☆☆★☆ ⊙☆★☆☆★☆★☆☆ ⊙☆☆★★☆★☆☆★ ⊙⊙⊙☆★☆★☆☆☆ ★★⊙☆☆☆☆☆★☆ ☆☆⊙⊙⊙⊙☆☆☆★ ☆☆★★★⊙☆★★☆ ☆☆★★☆⊙⊙⊙⊙⊙
输出之二:
迷宫图示 ☆☆☆☆★☆☆☆★☆ ☆★☆★★★☆☆☆★ ★☆☆☆☆☆☆☆☆☆ ☆☆☆☆☆★☆☆☆☆ ★☆☆☆★☆★★★★ ☆☆☆☆★★☆☆★☆ ★☆☆★☆☆★☆☆★ ☆☆☆☆☆☆☆☆☆☆ ☆☆☆★☆☆★☆★★ ☆☆★★☆☆☆★☆☆ 迷宫走不通
爪哇国新游记之二十六----迷宫寻路相关推荐
- 爪哇国新游记之二十四----二叉树
/*** 二叉树节点类* */ class Node<T extends Comparable> {public Node(T data){this.data=data;}T data;N ...
- 爪哇国新游记之二十八----从url指定的地址下载文件到本地
package download;import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; i ...
- 爪哇国新游记之二十五----图及其遍历查找
代码: import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; import java. ...
- 爪哇国新游记之二十九----访问URL获取输入流
代码: import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileWriter; import ...
- 爪哇国新游记之二十一----快算24
四张牌,通过四则运算得到24,一个数限用一次,快者为胜. 代码: import java.util.ArrayList; import java.util.HashSet; import java.u ...
- 爪哇国新游记之十六----泛型单链表类
/*** 单链表节点类* @param <T>*/ class Node<T extends Object>{protected T value;protected Node ...
- 爪哇国新游记之三十二----邮件发送
由三个类完成任务,第一个为主,main中是用法示例. 纯邮件发送和带附件发送邮件皆可,大家请参照main函数中用法. package com.ufo.util.mail;import java.uti ...
- 爪哇国新游记之十五----泛型动态数组类
import java.lang.reflect.Array;/*** 泛型动态数组类**/ public class DynamicArray<T extends Object>{pri ...
- 爪哇国新游记之十八----泛型栈类
import java.lang.reflect.Array;/*** 泛型栈** @param <T>*/ public class Stack<T>{private Cla ...
最新文章
- cnn stride and padding_卷积神经网络(CNN) 第 4 课(上)
- react-native 环境配置遇到的问题
- Java面向对象的程序设计
- Selenium-IDE脚本录制,selenium-side-runner自动化测试教程
- 根据开始日期和结束日期获取基金的当天净值,并计算收益率
- 谈谈前端包管理工具 npm yarn pnpm
- SecureCRT的下载、安装、使用( 过程非常详细~)
- linux qt socket编程视频教程,Qt视频教程第二十八集socket之UDP
- TCL电视禁止第三方安装软件?如何远程给安卓智能电视强制安装安卓所有软件?
- 高数笔记(六):拉格朗日中值定理,柯西中值定理,洛必达法则,泰勒定理
- 运动模糊(MotionBlur)
- AI绘画是什么软件?看完你就知道了
- Chapter 5. Monte Carlo Methods
- 无边界安全成新趋势,志翔科技推出首个体系化“无边界”安全产品
- 你看好我国网约车生态吗?
- (转)ubuntu个人桌面使用经验
- 桌面端编程之C++语言的知识架构
- Bootstrap table设置列宽和固定表头
- java基于ssm的酒店管理系统
- 【西安】SWAT模型高阶十七项案例分析
热门文章
- 【Java】springboot学习笔记二
- 【maven】maven的介绍
- app测试的过程和重点关注内容
- JMETER 分布式踩过的坑及填坑方法
- Servlet destroy()回收机制
- php webwxuploadmedia_PHP Web实现文件上传下载功能实例解析
- android中屏保功能项目,【Android】一段时间不操作弹出【屏保】效果
- linux网络安装gtk2,(一) linux 下gtk2,python的安装
- java邮件附件名称乱码_Javamail 中附件中文名字乱码祥解 (转)
- 虚拟网站禁用php,虚拟主机php程序fsockopen函数被禁用