迷宮演算法(java實現)
對於走迷宮,人們提出過很多計算機上的解法。深度優先搜尋、廣度優先搜尋是使用最廣的方法。生活中,人們更願意使用「緊貼牆壁,靠右行走」的簡單規則。
下面的**則採用了另一種不同的解法。它把走迷宮的過程比做「染色過程」。假設入口點被染為紅色,它的顏色會「傳染」給與它相鄰的可走的單元。這個過程不斷進行下去,如果最終出口點被染色,則迷宮有解。
在以下程式中「#」代表不可通過,「.」代表可以通過。
public class maze
class cell//內部類
private int row;
private int col;
private cell from;//指向父節點
public cell(int row, int col, cell from)
this.row = row;
this.col = col;
this.from = from;
char maze =,,
public void show()
for(int i=0; ifor(int j=0; jsystem.out.print(" " + maze[i][j]);
system.out.println();
//把與from集合中相鄰的可染色節點染色,被染色節點記入 dest
//一旦發現出口將被染色,則返回當前的「傳播源」節點
public cell colorcell(setfrom, setdest)
iteratorit = from.iterator();
while(it.hasnext())
cell a = it.next();
cell c = new cell[4];
c[0] = new cell(a.row-1, a.col, a); //向上
c[1] = new cell(a.row, a.col-1, a); //向左
c[2] = new cell(a.row+1, a.col, a); //向下
c[3] = newcell(a.row, a.col+1, a); //向右
for(int i=0; i<4; i++)
if(c[i].row < 0 || c[i].row >= maze.length)continue;
if(c[i].col < 0 || c[i].col >= maze[0].length)continue;
char x = maze[c[i].row][c[i].col];
if(x=='b') return a;
if(x=='.')
maze[c[i].row][c[i].col] = '?';//對可通過路徑進行標記
dest.add(c[i]);
return null;
public void resolve()
setset = new hashset();
set.add(new cell(9,11,null));
for(;;)
setset1 = new hashset();
cell a = colorcell(set, set1);
if(a!=null)
system.out.println("找到解!");
while(a!=null)
maze[a.row][a.col] = '+';//標出通路路徑
a =a.from;
break;
if(set1.isempty())
system.out.println("無解!");
break;
set = set1;
public static void main(string args)
maze m = new maze();
m.show();
m.resolve();
m.show();
程式的輸出結果為:"+"代表通路
迷宮演算法c 實現
迷宮演算法是乙個比較簡單的演算法,是在迷宮裡如何通過從入口找到出口,總的思路來是 每一條路都是由兩面呢牆壁組成,並且是每一面是連續的,只要我們從入口延著乙個牆壁一直走,例如一直沿著右手邊的牆壁來走,就一定可以找到出口,即便是乙個死胡同,沿著牆壁也可以繞出來。t 上圖可以看成乙個簡易的迷宮,代表牆,空...
棧實現迷宮演算法
棧實現迷宮回溯演算法 實現 include using namespace std include include define n 10 矩陣最大行列數 template class mazestack 迷宮將要用到的棧 mazestack void push t x this ptr size ...
迷宮路徑演算法實現
include include include include define stack init size 1000 define stackincrement 10 define ok 1 define overflow 0 define error 0 typedef int selemtyp...