java 利用dfs生成简单的随机迷宫(效率不高)
利用深搜可以生成简单的迷宫,思路就是从起点执行dfs。当然你要首先用一个容器将四个方向的随机数装起来保证一定可以走。一个点一旦被走过就不会再走那个店,利用递归思想,因为这个点如果不成功在之前回溯的时候就已经便利了所有可能,如果表标记取消掉,那么就会增加巨大计算量。
可以这样打个比方,从北京到南京,到苏州,到上海。现在到了苏州发现无论怎么走了十万八千里都到不了上海,那么苏州这个点就会被定位标记,往回走发现南京也不行。换路。在从北京到合肥到苏州到上海。遇到苏州就直接pass掉,因为它得不到结果。(不太形象但是就是这个意思)。
如果直接从左上到右下,地图可能会不均与有点难看,那么还可以加一个从右上到坐下的只走左和下的路径。(不能随机四个方向,否则太乱联通太多)。附上代码
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Scanner;public class 迷宫 {static int x[]= {1,0,-1,0};//下。右 ,上,static int y[]= {0,1,0,-1}; static int time=0;//路径总长度static int time2=0;//计算总次数static int length;static boolean c=false;public static void main(String[] args){System.out.println("请输入图的边长");Scanner sc=new Scanner(System.in);length=sc.nextInt();draw(length);}private static void draw(int m) {boolean b[][]=new boolean[m][m]; //标记 char a[][]=new char[m][m];for(int i=0;ilength-1||i x[s]<0||j y[s]>length-1||j y[s]<0)//不满足题意的。{continue;}else if(!b[i x[s]][j y[s]])//前面没有走过{char biaoji=a[i][j];time ;time2 ;a[i][j]='6';dfs(a,b,i x[s],j y[s],l,m); if(!c)//终止递归,防止破坏数组。{a[i][j]=biaoji;//b[i][j]=false;//不需要标记回溯,因为这条路走过就走过,换路走time--;} else//返回{return;} } } } }static void dfs2(char[][] a, boolean[][] b, int i, int j, int l, int m) {if(i==l&&j==m) {a[i][j]='6';System.out.println(time " " time2);c=true;}//证明已经找到else if(!c)//没找到结束{b[i][j]=true;List list=new ArrayList();List list2=new ArrayList();//存取排序后的数字for(int i1=0;i1<2;i1 ){list.add(i1);}for(int i2=0;i2<2;i2 ) {int team=(int) (Math.random()*list.size());list2.add(list.get(team));list.remove(team);}for(int k=0;k<2;k ) { int s=(int) list2.get(k) 1;//System.out.println(s);if(i x[s]>length-1||i x[s]<0||j y[s]>length-1||j y[s]<0)//不满足题意的。{continue;}else if(!b[i x[s]][j y[s]])//前面没有走过{char biaoji=a[i][j];time ;time2 ;a[i][j]='6';dfs2(a,b,i x[s],j y[s],l,m); if(!c){a[i][j]=biaoji;//b[i][j]=false;//不需要标记回溯,因为这条路走过就走过,换路走time--;} else//返回{return;} } } } }
}
注意测试数据不能太大,否则会爆内存。
当然这种迷宫是很low的,如果生成另一种迷宫还需要并查集知识。
java 利用dfs生成简单的随机迷宫(效率不高)相关推荐
- Java利用poi生成word(包含插入图片,动态表格,行合并)
Java利用poi生成word(包含插入图片,动态表格,行合并) 测试模板样式: 图表 1 Word生成结果: 图表 2 需要的jar包:(具体jar可自行去maven下载) Test测试类: imp ...
- java利用zxing生成二维码
什么是ZXing? ZXing是一个开源的,用Java实现的多种格式的1D/2D条码图像处理库. 利用ZXing这个工具库来生成二维码,具体操作如下: 引入相关资源包 <dependency&g ...
- flutter生成源代码_Flutter随机迷宫生成和解迷宫小游戏功能的源码
此博客旨在帮助大家更好的了解图的遍历算法,通过Flutter移动端平台将图的遍历算法运用在迷宫生成和解迷宫上,让算法变成可视化且可以进行交互,最终做成一个可进行随机迷宫生成和解迷宫的APP小游戏.本人 ...
- 利用JFreeChart生成简单柱状图(Java)
1 package barchartdemo1; 2 3 import <a href="http://lib.csdn.net/base/javaee" class='re ...
- Java利用Zxing生成二维码及解析二维码内容
前言 Java 操作二维码的开源项目很多,如 SwetakeQRCode.BarCode4j.Zxing 等等 本篇文章是介绍利用Zxing来生成二维码图片在web网页上展示,同时解析二维码图片. Z ...
- Java利用POI生成Excel强制换行
前一段时间在做一个学校排课系统时,有一个地方需要利用把课程表生成excel汇出给客户,由于之前用excel都只是简单的应用,在单元格里都是用自动换行,而这次可能需要用到手动强制换行. 于是我在网上找 ...
- java利用poi生成/读取excel表格
1.引入jar包依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</ ...
- java利用qrcode生成带有logo的二维码(logo位置及大小自己调)
一:下载Qrcode.jar,放到lib文件夹下 二:java代码 package com.test; import java.awt.Color; import java.awt.Graphics2 ...
- java利用xml生成excel_JAVA环境中基于XML的一种EXCEL报表生成方法
JAVA环境中基于XML的一种EXCEL报表生 成方法 彭海波王哓东 昆明理工大学信息工程与自动化学院, 云南昆明 650051 摘要:本文探讨了JAVA语言环境下的基于XML的一种EXCEL报表实现 ...
最新文章
- IIC通信控制的AD5259------在调试过程中遇到的奇葩问题
- 自动化测试QTP知识框架
- python celery异步_【Python】Celery异步处理
- 工程勘察设计收费标准2002修订版_全过程工程咨询收费模式超全解析
- 2、Sprite,SpriteBatch,Texture,TextureRegion的初步认识
- python access 源码_连接的微软Access数据库,这是一个轻量级的Python模块(MDB格式)...
- linux 禁止其他用户登录,在Linux中如何禁止用户登录
- python论文参考文献5篇_“送”5篇SCI论文,意味着什么?
- 立即释放.net下的com组件
- RGB 与 RGBA 与 16进制 与 HSL 之间的简单转换
- camera hardware module
- Jenkins在执行JUnit报告时报错Test reports were found but none of them are new. Did leafNodes run? 问题解决
- 计算机屏幕颜色变黄色,win10系统电脑屏幕颜色偏黄如何调节
- 真无线蓝牙耳机性价比高?真无线蓝牙耳机性价比排行
- 微信web开发者工具 linux,Linux微信web开发者工具
- Java发送手机短信
- 全志D1-H芯片 如何在tina使用tplayerdemo 进行rtsp拉流说明?
- 恋词题源报刊Unit2
- windows下的ntsd命令
- 基于Carsim和Simulink的SIL软件在环仿真验证
热门文章
- 区块链BaaS云服务(21)腾讯CCGP“治理链”
- C++ Primer 5th笔记(chap 13 拷贝控制)=default
- Collection集合中的 contains 和 remove 使用深入——为什么要重写equals() ?
- Linux软件安装配置Yum源
- A53 cache的架构解读
- 详解虚函数的实现过程之多重继承(3)
- 「安全技术」针对常见混淆技术的反制措施
- Fuzz学习笔记(一)—— WinAFL环境搭建与基本使用
- pwn学习总结(四)—— 堆基础知识(持续更新)
- 009 自动打怪功能的设计和实现