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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 利用dfs生成简单的随机迷宫(效率不高)

發布時間:2025/3/20 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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生成简单的随机迷宫(效率不高)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。