生活随笔
收集整理的這篇文章主要介紹了
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
;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;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
;time
--;} else{return;} } } } }
}
注意測試數據不能太大,否則會爆內存。
當然這種迷宮是很low的,如果生成另一種迷宮還需要并查集知識。
總結
以上是生活随笔為你收集整理的java 利用dfs生成简单的随机迷宫(效率不高)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。