迷宮尋寶 一

2022-01-12 06:36:15 字數 1494 閱讀 2731

時間限制:1000 ms  |  記憶體限制:65535 kb

難度:4

描述乙個叫acm的尋寶者找到了乙個藏寶圖,它根據藏寶圖找到了乙個迷宮,這是乙個很特別的迷宮,迷宮裡有n個編過號的門(n<=5),它們分別被編號為a,b,c,d,e.為了找到寶藏,acm必須開啟門,但是,開門之前必須在迷宮裡找到開啟這個門所需的所有鑰匙(每個門都至少有一把鑰匙),例如:現在a門有三把鑰匙,acm就必須找全三把鑰匙才能開啟a門。現在請你編寫乙個程式來告訴acm,他能不能順利的得到寶藏。

輸入輸入可能會有多組測試資料(不超過10組)。

每組測試資料的第一行包含了兩個整數m,n(1

.表示可以走的路

s:表示acm的出發點

g表示寶藏的位置

x表示這裡有牆,acm無法進入或者穿過。

a,b,c,d,e表示這裡是門,a,b,c,d,e表示對應大寫字母的門上的鑰匙。

注意acm只能在迷宮裡向上下左右四個方向移動。

最後,輸入0 0表示輸入結束。

輸出每行輸出乙個yes表示acm能找到寶藏,輸出no表示acm找不到寶藏。

樣例輸入

4 4 

s.x.

a.x.

..xg

....

3 4

s.xa

.axb

b.ag

0 0

樣例輸出

yes 

no分析:bfs或dfs均可

#include #include #include #include #include #include //islower

typedef struct nodenode;

using namespace std;

queueq;

vectordoor[5];

short sx,sy;

short m,n;

short key[5];

bool vis[20][20];

char maze[20][20];

short int dx[4]=,dy[4]=;

void input()

}}bool check(node temp)

if(islower(ch))

} return true;

}void bfs()

vis[temp.x][temp.y]=true;

q.push(temp);

}} }

puts("no");

}int main()

return 0;

}

其中關於input,也可以選擇下一種方式:

for(i=0;i='a' && ch<='e')

++key[ch-'a'];

else if(ch=='s')

}}

關於dfs的解法,隨後奉上。。。

參照:

NYOJ 迷宮尋寶(一)

時間限制 1000 ms 記憶體限制 65535 kb 難度 4 描述乙個叫acm的尋寶者找到了乙個藏寶圖,它根據藏寶圖找到了乙個迷宮,這是乙個很特別的迷宮,迷宮裡有n個編過號的門 n 5 它們分別被編號為a,b,c,d,e.為了找到寶藏,acm必須開啟門,但是,開門之前必須在迷宮裡找到這個開啟這個...

NYOJ迷宮尋寶(一)

描述 乙個叫acm的尋寶者找到了乙個藏寶圖,它根據藏寶圖找到了乙個迷宮,這是乙個很特別的迷宮,迷宮裡有n個編過號的門 n 5 它們分別被編號為a,b,c,d,e.為了找到寶藏,acm必須開啟門,但是,開門之前必須在迷宮裡找到這個開啟這個門所需的所有鑰匙 每個門都至少有一把鑰匙 例如 現在a門有三把鑰...

迷宮尋寶(一) bfs

時間限制 1000 ms 記憶體限制 65535 kb 難度 4 描述乙個叫acm的尋寶者找到了乙個藏寶圖,它根據藏寶圖找到了乙個迷宮,這是乙個很特別的迷宮,迷宮裡有n個編過號的門 n 5 它們分別被編號為a,b,c,d,e.為了找到寶藏,acm必須開啟門,但是,開門之前必須在迷宮裡找到這個開啟這個...