南陽oj 82 迷宮尋寶(一)

2021-07-31 11:42:56 字數 1996 閱讀 1057

描述

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

輸入

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

每組測試資料的第一行包含了兩個整數m,n(1最後,輸入0 0表示輸入結束。

輸出

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

樣例輸入

4 4

s.x.

a.x.

..xg

…. 3 4

s.xa

.axb

b.ag

0 0

樣例輸出

yes

no被坑了 原來是一遍一遍的遍歷修改 ┭┮﹏┭┮

多次查詢

更開始想這根據他的abcde的個數計算遍歷次數結果 錯了漏洞很多

還是 多次遍歷 分別統計修改abcde為「.」也就是找到乙個門的所有鑰匙開啟門 方便前行

沒有找到寶藏時,在一次遍歷時,沒有找到任何一枚鑰匙,就不用在遍歷了,可以直接結束。因為在一次遍歷中在它所能走的路上沒有鑰匙且沒有找到寶藏,那麼就沒有可能能找到寶藏了。

#include

#include

#include

#include

#include

using

namespace

std;

struct node

as,x1,t;

int n,m,k;

int dir[4][2]=,,,};

int a1[21][21];

char a[22][22];

int a2,a3,b2,b3,c2,c3,d2,d3,e2,e3;

int a4,b4,c4,d4,e4;

int dfs()

if(t.x>=0&&t.x=0&&t.y'x'&&a1[t.x][t.y]==0)

if(a[t.x][t.y]=='b')

if(a[t.x][t.y]=='c')

if(a[t.x][t.y]=='d')

if(a[t.x][t.y]=='e')

if(a[t.x][t.y]=='a'&&a4!=a2)

continue;

if(a[t.x][t.y]=='b'&&b4!=b2)

continue;

if(a[t.x][t.y]=='c'&&c4!=c2)

continue;

if(a[t.x][t.y]=='d'&&d4!=d2)

continue;

if(a[t.x][t.y]=='e'&&e4!=e2)

continue;

q.push(t);}}

}if(k==1)

return

0; else

return -1;

}int main()

if(a[i][j]=='a')

a2++;

if(a[i][j]=='b')

b2++;

if(a[i][j]=='c')

c2++;

if(a[i][j]=='d')

d2++;

if(a[i][j]=='e')

e2++;}}

a4=0; b4=0; c4=0; d4=0; e4=0;

while(1)

else}}

return

0;}

南陽oj 82 迷宮尋寶(一)

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

南陽oj 82 迷宮尋寶(一)

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

nyoj82迷宮尋寶(一)

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