nyoj82 迷宮尋寶(一)(DFS 推薦看看)

2021-07-10 19:31:19 字數 1596 閱讀 3750

時間限制:

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

**poj月賽改編

上傳者張云聰

其實就是一道搜尋題 卡了我一天多   不過還是挺喜歡這道題的 

其實廣搜 深搜都能做 。在這裡我是用深搜做的

主要就是判斷遇到門的時候怎麼辦 。如果遇到門 1.當前的鑰匙不足以開門 2.當前的鑰匙可以開門

第二種就不用說了 。主要說說第一種情況 。如果當前的鑰匙不足以開門 我們需要在地圖其它的可行區域找全  是否能夠找到剩餘的鑰匙 然後再回到門前

,對於如何回到門前呢?我們可以定義乙個陣列來存貯門的位置 當其它區域全部找全後我們再回到門前判斷能不能開門即可

#include #include #include using namespace std;

//地圖

char map[25][25];

//遍歷標記

bool vis[25][25];

//是否找到寶藏

bool result;

//鑰匙總數

int key[5];

//當前找到的鑰匙總數

int curkey[5];

int n,m;

int st_x,st_y;

struct node

door[5];

void check();

void dfs(int x,int y)

dfs(x+1,y);

dfs(x-1,y);

dfs(x,y+1);

dfs(x,y-1);

check();

}//地圖找完後 回到門前再次判斷是否可以開門

void check()

} }}int main()

} result=false;

dfs(st_x,st_y);

if(result)

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