NYOJ 82 迷宮尋寶(一)

2021-07-07 04:21:00 字數 1487 閱讀 7802

時間限制:

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

解題思路:這個題是廣搜,就是對圖的搜尋。主要是兩個方面:1、當鑰匙找完後,遇到門就可以開啟,也就是說當搜尋到圖中的門時,就可以開啟,2、雖然搜尋到門,但是鑰匙沒找完則此時不能開啟該門。具體過程看**中的注釋

具體**;

#include #include #include using namespace std;

struct node

;queueq;

char map[25][25];//定義字元陣列儲存圖

int key[5];//儲存鑰匙的數量

node door[5];//定義乙個結構體型別的陣列,存放門的位置

node d;//定義結構體變數,記錄當前訪問點的位置

void add(int i,int j)

int bfs()

//若遇到門時,要是沒找到完,先記錄門的位置,等鑰匙找完後再進行搜尋

else if(map[i][j]>='a'&&map[i][j]<='e'&&key[map[i][j]-'a']!=0)

door[map[i][j]-'a']=d;

else if(map[i][j]=='g')//說明已經到達終點

return 1;

else if(map[i][j]!='x')

}return 0;

}int main()

if(map[i][j]>='a'&&map[i][j]<='e')

key[map[i][j]-'a']++;//記錄圖中各類鑰匙對應的總數

}} if( bfs()==1 )

printf("yes\n");

else

printf("no\n");

} return 0;

}

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...