迷宮問題高階

2021-08-15 13:34:09 字數 1453 閱讀 2452

是乙個關於二維迷宮的題目。我們要從迷宮的起點 's' 走到終點 'e',每一步我們只能選擇上下左右四個方向中的乙個前進一格。 'w' 代表牆壁,是不能進入的位置,除了牆壁以外的地方都可以走。迷宮內的 'd' 代表一道上鎖的門,只有在持有鑰匙的時候才能進入。而 'k' 則代表了鑰匙,只要進入這一格,就會自動地拿到鑰匙。最後 '.' 則是代表空無一物的地方,歡迎自在的遊蕩。    本題的迷宮中,起點、終點、門跟鑰匙這四個特殊物件,每乙個恰好會出現一次。而且,此迷宮的四周 (最上面的一行、最下面的一行、最左邊的一列以及最右邊的一列) 都會是牆壁。    請問,從起點到終點,最少要走幾步呢?

輸入的第一行有兩個正整數h, w,分別代表迷宮的長跟寬。接下來的h行代表迷宮,每行有乙個長度恰為w的字串,此字串只包含`'s'`, `'e'`, `'w'`, `'d '`, `'k'`, `'.'`這幾種字元。

請在一行中輸出乙個整數代表答案,如果無法從起點走到終點,請輸出-1。

樣例:輸入:

4 12

wwwwwwwwwwww

w e.w.s..w.kw

w. .d..w....w

ww wwwwwwwwww

輸出:20

**:/*

思路:先看不經過門能不能到達終點,並求出能到達終點距離;

如果經過門也能達到終點,先求出到達鑰匙的距離再求鑰匙到達終點的距離,相加便是經過門到達終點的距離;

最後比較兩種走法哪個距離最短;

自己寫的**太複雜最後也wa了,參考了別人的**。

*/#include

using namespace std;

#define inf 0x3f3f3f3f

struct node

ss,ee,kk;

char g[505][505];

bool vis[505][505];

int dx[4] = ;

int dy[4] = ;

int n,m,ans;

void bfs(node s, node e, bool key)//key表示是否有鑰匙

if(g[x][y] == 'k')

kk.step = next.step+1;

vis[x][y] = 1;

node temp;

temp.x = x;

temp.y = y;

temp.step = next.step + 1;

q.push(temp);}}

}}int main()

ans = inf;

bfs(ss,ee,0);//沒有鑰匙

if(kk.step != -1)

bfs(kk,ee,1);//有鑰匙

if(ans == inf)

printf("-1\n");

else

printf("%d\n",ans);

return 0;

}

迷宮問題(高階)C C

利用廣度優先搜尋來解決迷宮中的最短路徑,需要把佇列稍微做下調整,博主用的順序佇列,也可以用鏈式,鏈式搜尋起來方便些。之前看到有校友用dfs來解決的,但是相對來說演算法複雜度要高些,因為dfs一般用來解決所有路徑數目問題。typedef structsqqueue 直接甩 include includ...

問題 A 迷宮求解問題

時間限制 10 sec 記憶體限制 2048 mb 提交 574 解決 306 提交 狀態 討論版 用乙個m n的矩陣表示迷宮,0和1分別表示迷宮中的通路和障礙。設計乙個程式,對給定的迷宮,求出找到的第一條從入口到出口的通路,或得到沒有通路的結論。我們指定 1 迷宮的入口為矩陣的左上角 1,1 迷宮...

迷宮問題求解(1) 簡單迷宮

標頭檔案 include include include include include maze.h define max 100 typedef struct position datatype typedef struct stack stack void stackinit stack s ...