nyoj 82 迷宮尋寶(一)(廣搜)

2021-07-06 03:17:10 字數 1539 閱讀 1843

時間限制:

1000 ms  |  記憶體限制:

65535 kb

難度:4 描述

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

輸入

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

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

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

樣例輸入

4 4 

s.x.

a.x.

..xg

....

3 4

s.xa

.axb

b.ag

0 0

樣例輸出

yes 

no

題意:.乙個迷宮由「s」「,」「g」「x」「abcde」,「abcde」組成。

。表示可以走的路

s:表示acm的出發點

g表示寶藏的位置

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

a,b,c,d,e表示這裡是門,a,b,c,d,e表示對應大寫字母的門上的鑰匙。(不同的門可能有多把鑰匙,只有收集對應門的所有的鑰匙才能開啟這個門)

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

解題思路:把所有門的對應的鑰匙個數記錄下。然後進行廣搜,如果遇到鑰匙,對應的門的值減1,直到減為0的時候才能通過這個門,否則不能通過。,不能通過就把門再次進佇列,每搜尋一次後就進行檢測一下,是否有門可以開啟,直到佇列中只有乙個門元素時,表示門實在打不開!

#include#include#includeusing namespace std;

#include#includeint h,w,key[100],visit[100][100];

char map[100][100];

int dx[4]=;

int dy[4]=;

struct node

;int judge(node in)

int bfs(int x,int y)

else

else

}} for(i=0;i<4;i++)

}return 0;

} int main()

} if(bfs(x,y))

printf("yes\n");

else

printf("no\n");

} return 0;}/*

4 5***gx

***ax

xa.sx

xa..x

3 4

sax.

.axb

b.ag

*/

nyoj82迷宮尋寶(一)

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

迷宮尋寶(一) nyoj 82

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

Nyoj 82 迷宮尋寶(一)

include include include include using namespace std const int maxn 25 struct point pos point pos targetpos,doorpos 5 寶藏的位置,每個門的位置 char graph maxn maxn...