java迷宫生成代码_通过深度优先搜索产生的迷宫的Java代码
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Random;
public class maziness {
private int M;//行数
private int N;//列数
private int[] visitMatrix;//搜索是判断是否曾被访问过
private int[][] colMatrix;//保存要输出的的'|'矩阵
private int[][] rowMatrix;//保存要输出的的'_'矩阵
private Random random;//用来生成随机数,保证迷宫的复杂程度
public maziness(int M ,int N){
this.M=M;
this.N=N;
visitMatrix=new int[M*N];
colMatrix = new int[M][N+1];
rowMatrix = new int[M+1][N];
init(colMatrix,M,N+1);
init(rowMatrix,M+1,N);
for (int i=0;i
visitMatrix[i]=0;
random = new Random();
}
private void init(int matrix[][],int M ,int N){
for (int i=0;i
for (int j=0;j
matrix[i][j]=1;
}
//返回num周围可用的邻居,即没被访问过,也没到达边缘
private void availableNeigbers(ArrayList list,int num){
int allNeigber[]=new int[4];
if (num%N==1){
allNeigber[0]=num-N;
allNeigber[1]=num+N;
allNeigber[2]=num+1;
allNeigber[3]=-1;
}
else if (num%N==0){
allNeigber[0]=num-N;
allNeigber[1]=num+N;
allNeigber[2]=num-1;
allNeigber[3]=-1;
}
else{
allNeigber[0]=num-N;
allNeigber[1]=num+N;
allNeigber[2]=num-1;
allNeigber[3]=num+1;
}
for (int i=0;i<4;i++){
if (allNeigber[i]>0 & allNeigber[i]<=M*N)
if (visitMatrix[allNeigber[i]-1]==0 )
list.add(allNeigber[i]);
}
}
//返回随机选出的可用邻居
private int neigber(int num){
ArrayList list=new ArrayList();
availableNeigbers(list,num);
if (list.isEmpty())
return -1;
else{
return (Integer) list.get(random.nextInt(list.size()));
}
}
//移除num1和num2之间的墙
private void removeWall(int num1,int num2){
int x1=(num1+N-1)/N-1;
int y1=(num1-1)%N;
if (Math.abs(num1-num2)==1){
if (num1>num2)
colMatrix[x1][y1]=0;
else
colMatrix[x1][y1+1]=0;
}
else {
if (num1>num2)
rowMatrix[x1-1][y1]=0;
else
rowMatrix[x1][y1]=0;
}
}
//生成迷宫
public void process(){
ArrayList list=new ArrayList();
int curr=(M*N)/2;
visitMatrix[curr-1]=1;
list.add(curr);
int tmp;
while (!list.isEmpty()){
tmp=neigber(curr);
if (tmp>0){
visitMatrix[tmp-1]=1;
removeWall(curr,tmp);
curr=tmp;
list.add(curr);
}
else
curr=(Integer) list.remove(list.size()-1);
}
}
//绘制迷宫,并输出到txt文件中
public void draw(FileOutputStream fos){
try {
fos.write(' ');
fos.write(' ');
for (int i=0;i
fos.write(' ');
fos.write('_');
}
fos.write('\r');
for (int i=0;i
int j;
for (j=0;j
if (colMatrix[i][j]==1)
fos.write('|');
else
fos.write(' ');
if (rowMatrix[i][j]==1)
fos.write('_');
else
fos.write(' ');
}
if (i!=M-1 || j!=N){
fos.write('|');
fos.write('\r');
}
}
fos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
FileOutputStream fos=new FileOutputStream("F://maze.txt");
maziness m=new maziness(30,60);
m.process();
m.draw(fos);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println(e);
}
}
}
java迷宫生成代码_通过深度优先搜索产生的迷宫的Java代码相关推荐
- java深度优先迷宫生成_通过深度优先搜索产生的迷宫的Java代码
下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. import java.io.FileOutputStream; import java. ...
- python解图片迷宫生成路径_用Python代码来解图片迷宫的方法整理
译注:原文是StackOverflow上一个如何用程序读取迷宫图片并求解的问题,几位参与者热烈地讨论并给出了自己的代码,涉及到用python对图片的处理以及广度优先(BFS)算法等. 问题by Why ...
- 搜索功能java代码_简单的搜索框代码实现
简单的搜索框页面功能的实现(代码如下) String path = request.getContextPath(); String basePath = request.getScheme()+&q ...
- 搜索重复代码_通过MappedByteBuffer搜索大文件
此应用程序对于在不适合BufferedReader.files.readAllLines().files.lines()和Scanner的大文件中进行搜索非常有用. 我们将在这里讨论的解决方案基于Ja ...
- java自动生成类_自动生成优化的Java类专业知识
java自动生成类 如果您今年访问过JavaOne,您可能已经参加了我的演讲"如何从数据库生成定制的Java 8代码". 在那次演讲中,我展示了如何使用Speedment Open ...
- java 编写代码_如果您在2016年编写过Java代码-这是您不容错过的趋势
java 编写代码 2016年最有趣的Java相关主题 关于代码,有很多热门话题,而要跟上所有事情,这是一项全职的工作. 如果您想知道如何从谷壳中分离出小麦,我们已经为您完成了工作. 在下面的文章中, ...
- java代码_阿里资深工程师教你如何优化 Java 代码!
作者 | 王超责编 | 伍杏玲 明代王阳明先生在<传习录>谈为学之道时说: 私欲日生,如地上尘,一日不扫,便又有一层.着实用功,便见道无终穷,愈探愈深,必使精白无一毫不彻方可. 代码中的& ...
- leetcode 559. N 叉树的最大深度(Java版,N叉树的深度优先搜索)
题目 https://leetcode-cn.com/problems/maximum-depth-of-n-ary-tree/ 题解 思路是 N 叉树的遍历(深度优先搜索) /* // Defini ...
- jtest java 代码_使用Jtest:一款优秀的 Java 代码优化和测试工具
2.file>new>Project>Jtest>Create Project Specifying Source Folders. 这种方式允许开发测试人员自定义代码层次结构 ...
最新文章
- npm 安装less插件_2020 VSCode插件推荐
- 算法(6) —— AVL树
- Netty原理一:ServerBootstrap启动过程全解析
- m3u8地址_「波波带你手动提取网页视频」04讲 Network和Elements提取m3u8链接
- android 号码查联系人,Android联系人查询
- jQuery设计动画
- Spark提交 指定 kerberos 认证信息
- Win7系统默认浏览器的更改教程
- Linux学习笔记-Linux下读写文件
- [转]Python中下划线---完全解读
- 寻找安全漏洞?谨慎为之
- 比较JSF、Spring MVC、Stripes、Struts 2、Tapestry、Wicket
- Winform 实现像菜单一样弹出层
- 博弈论——人生就是在博弈
- 描述 J2EE 框架的多层结构,并简要说明各层的作用。
- 「洛谷P2906」[USACO08OPEN]牛的街区Cow Neighborhoods 解题报告
- 基于单片机的超市储物柜设计_基于51单片机的超市自动储物柜的设计,求大佬指点?...
- 几何画板中去除画出的线段的教程
- 【学习笔记】大数据搜索与挖掘
- IT忍者神龟之小程序最全的微信小程序项目实例