迷宮演算法( 實現)

2021-06-05 00:38:03 字數 1975 閱讀 3670

迷宮演算法(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...