時間限制: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.在搜尋的時候用been標記這個門是不是可以到達,用num==key&&key>0表示當前有足夠的鑰匙可以通過
3.讀入的時候有多餘空格,不要單個字元讀入
#include#include#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
typedef
long
long
ll;typedef unsigned
long
long
ull;
#define maxn 22
#define lll 1000000000
#define inf 1000000009
#define eps 0.00000001
/*bfs 搜尋,在讀入圖的時候記錄abcde所需要的鑰匙個數
先bfs一遍,找到所有能找到的鑰匙。
然後對於所有的門,如果第一次搜尋能到達而且鑰匙足夠。
把這個門加入佇列再搜
*/struct
node
};node start,aim;
vector
door[5
];int key[5], num[5], n, m;//
需要的鑰匙個數,n行m列
int x[4] = , y[4] = ;
bool
been[maxn][maxn];
char
g[maxn][maxn];
intcheck()}}
return -1;}
bool
bfs(node s)}}
return
false;}
intmain()
for (int i = 0; i < n; i++)
else
if (g[i][j] - '
a' >= 0 && g[i][j] - 'a'
< 5
)
else
if (g[i][j] == 's'
)
else
if (g[i][j] == 'g'
) }}
if(bfs(start))
while (1
)
door[k].erase(door[k].begin() +j);}}
if(f)
break
; }
if (!f)
printf(
"no\n");
else
printf(
"yes\n");
}return0;
}
迷宮尋寶(一) bfs
時間限制 1000 ms 記憶體限制 65535 kb 難度 4 描述乙個叫acm的尋寶者找到了乙個藏寶圖,它根據藏寶圖找到了乙個迷宮,這是乙個很特別的迷宮,迷宮裡有n個編過號的門 n 5 它們分別被編號為a,b,c,d,e.為了找到寶藏,acm必須開啟門,但是,開門之前必須在迷宮裡找到這個開啟這個...
nyoj ACM 迷宮尋寶(一) bfs
迷宮尋寶 一 時間限制 1000 ms 記憶體限制 65535 kb 難度 4 描述 乙個叫acm的尋寶者找到了乙個藏寶圖,它根據藏寶圖找到了乙個迷宮,這是乙個很特別的迷宮,迷宮裡有n個編過號的門 n 5 它們分別被編號為a,b,c,d,e.為了找到寶藏,acm必須開啟門,但是,開門之前必須在迷宮裡...
NYOJ82 迷宮尋寶(一) BFS
時間限制 1000 ms 記憶體限制 65535 kb 難度 4 描述 乙個叫acm的尋寶者找到了乙個藏寶圖,它根據藏寶圖找到了乙個迷宮,這是乙個很特別的迷宮,迷宮裡有n個編過號的門 n 5 它們分別被編號為a,b,c,d,e.為了找到寶藏,acm必須開啟門,但是,開門之前必須在迷宮裡找到這個開啟這...