時間限制: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 4s.x.
a.x.
..xg
....
3 4
s.xa
.axb
b.ag
0 0
樣例輸出
yesno分析:bfs或dfs均可
#include #include #include #include #include #include //islowertypedef 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必須開啟門,但是,開門之前必須在迷宮裡找到這個開啟這個...