模擬求解迷宮問題(DFS BFS)

2022-02-17 18:56:12 字數 3423 閱讀 1175

迷宮是實驗心理學中乙個古典問題。以乙個n*m的長方陣表示迷宮,0和1分別表示迷宮中的通路和障礙。入口在左上方(1,1)處,出口在右下方(n,m)處。

要求求出從迷宮入口到出口有無通路的最短路徑。

生成迷宮(呼叫的c語言中的srand和rand函式):

#include #include #include #include #include #include using namespace std;

#define max 1000

int map[max][max];

void createmap(int n, int m) //1代表牆壁 0代表通路

}}int main()

else}}

return 0;

}

迷宮搜尋:(bfs)

路徑標記使用了api:setconsoletextattribute

#include #include #include #include #include #include using namespace std;

#define max 1000

#define turn 8

typedef struct point

point;

const int moves[turn][2] = , , , , , , , };

int map[max][max];

bool visited[max][max];

int color[max][max];

int n, m, ans;

queueq;

point back[max][max], path[max];

void loadmap()

} cin.close();

}void showmap()

else

} }}

void bfs(int x, int y)

point pre, next;

pre.x = x;

pre.y = y;

pre.cnt = 0;

visited[pre.x][pre.y] = true;

q.push(pre);

while(!q.empty())

for(int i = 0; i < turn; i++)

}} for(int i = ans; i >= 0; i--) }

void showsetp()

int count = 0;

for(int i = 1; i <= n; i++)

else

}cout << endl;

count++; }}

/*void bcaktrack(int x, int y)

else

}*/

int main()

else

return 0;

}

測試程式(呼叫了bat,拒絕手動,主要還是懶=。=)

monitoring.bat

@shift

@echo off

setlocal

mode con: cols=40 lines=15

color 0a

title 迷宮 by_n3verl4nd

:start

for /l %%a in (

15,-1,0

) do (

echo.

echo.

echo.

echo.

echo ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

echo ☆ 每隔15秒自動啟動迷宮程式 ☆

echo ☆ 還剩餘 %%a 秒 ☆

話說,記錄這張等了好久的說。結點一多,dfs的效率就降低了。

迷宮問題 dfs bfs

從迷宮入口點 1,1 出發,出口點 m,n 1.求所有路徑條數 2.求最短路徑條數 3.輸出一條最短路徑 題解 向四周搜尋,記下所有一步能到達的座標點 然後依次再從這些點出發,再記下所有一步能到達的座標點,依此類推,直到到達迷宮的出口點 m,n 為止,然後從出口點沿搜尋路徑回溯直至入口。這樣就找到了...

dfs bfs 逃離迷宮

給定乙個m n m行,n列 的迷宮,迷宮中有兩個位置,gloria想從迷宮的乙個位置走到另外乙個位置,當然迷宮中有些地方是空地,gloria可以穿越,有些地方是障礙,她必須繞行,從迷宮的乙個位置,只能走到與它相鄰的4個位置中,當然在行走過程中,gloria不能走到迷宮外面去。令人頭痛的是,glori...

簡單迷宮(DFS BFS)

ps 不得不說自己太菜了,dfs和bfs的模板題都搞了好幾個小時 有乙個 10 x 10 的迷宮,起點是 s 終點是 e 牆是 道路是空格。乙個機械人從起點走到終點。當機械人走到乙個通道塊,前面已經沒有路可走時,它會轉向到當前面向的右手方向繼續走。如果機械人能夠過,則留下足跡 如果走不通,則留下標記...