日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java深度优先迷宫生成_通过深度优先搜索产生的迷宫的Java代码

發(fā)布時間:2025/4/5 java 11 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java深度优先迷宫生成_通过深度优先搜索产生的迷宫的Java代码 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

下面是編程之家 jb51.cc 通過網(wǎng)絡收集整理的代碼片段。

編程之家小編現(xiàn)在分享給大家,也給大家做個參考。

import java.io.FileOutputStream;

import java.io.IOException;

import java.util.ArrayList;

import java.util.Random;

public class maziness {

private int M;//行數(shù)

private int N;//列數(shù)

private int[] visitMatrix;//搜索是判斷是否曾被訪問過

private int[][] colMatrix;//保存要輸出的的'|'矩陣

private int[][] rowMatrix;//保存要輸出的的'_'矩陣

private Random random;//用來生成隨機數(shù),保證迷宮的復雜程度

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);

}

}

}

以上是編程之家(jb51.cc)為你收集整理的全部代碼內(nèi)容,希望文章能夠幫你解決所遇到的程序開發(fā)問題。

如果覺得編程之家網(wǎng)站內(nèi)容還不錯,歡迎將編程之家網(wǎng)站推薦給程序員好友。

相關文章

總結

如果覺得編程之家網(wǎng)站內(nèi)容還不錯,歡迎將編程之家網(wǎng)站推薦給程序員好友。

本圖文內(nèi)容來源于網(wǎng)友網(wǎng)絡收集整理提供,作為學習參考使用,版權屬于原作者。

如您喜歡交流學習經(jīng)驗,點擊鏈接加入交流1群:1065694478(已滿)交流2群:163560250

總結

以上是生活随笔為你收集整理的java深度优先迷宫生成_通过深度优先搜索产生的迷宫的Java代码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。