NYOJ 迷宮尋寶(一) 搜尋 廣搜

2021-07-31 04:31:40 字數 3419 閱讀 5998

時間限制: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

調了乙個中午終於ac了不過**已經醜的我自己都看不下去了,和標程一比簡直都不能看人家的**又少執行效率又高,歸根結底還是思路的問題。所以說一道題目花一些時間思考找到乙個好的思路還是很重要的。先說我的思路吧,因為看到資料並不大(20*20最多也就四百)就想著純粹的把找鑰匙開門的過程模擬一遍,輸入的時候將各個鑰匙的數量記錄下來,先把能拿到的鑰匙拿完,如果有某個門可以開了就把這個門全變成路,因為地圖更新了嘛,然後再把上面的過程重複一遍,一直到拿不到鑰匙或者找到寶藏。說著就極其麻煩所以導致**同樣極其複雜。

#include 

#include

#include

#include

using

namespace

std;

char cha=;

char t[30][30];

int a,b,c,d,e;

int m,n,bj;

int vis[30][30]=;

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

struct zuobiaop,k;

queue

q;int gai() //判斷某種鑰匙是否已經全部到手,返回全部拿到的鑰匙編號

if(b==0)

if(c==0)

if(d==0)

if(e==0)

return -1;

}int pan(char ch)//判斷是否可以通過,路、鑰匙、寶藏都是可以通過

int key_jian(char ch)//判斷當前塊兒是否為鑰匙,是的話相應鑰匙數量-1,並返回真

void key(char ch)//輸入時儲存鑰匙數量

void bfs(int q_x,int q_y,int z_x,int z_y)//廣搜

for(int i=0;i<4;i++)}}

int linshi=gai();//判斷此次搜尋是否有能開的門

if(linshi>=0)}}

}int main()

if(t[i][j]=='g')

key(t[i][j]);

}for(int i=0;i<6&&bj==1;i++)

if(bj)

cout

<<"no"

0;}

#include

#include

#include

#include

using

namespace

std;

struct node

n1,n2;

int dx[4]=;

int dy[4]=;

int k[6];

int m,n;

int begin_x,begin_y;

char

map[25][25];

bool vis[25][25];

bool judge(int x,int y)

bool bfs()}}

for(int i=0;i<4;i++)}}

return

false;

}int main()

if(map[i][j]>='a'&&map[i][j]<='e') k[map[i][j]-'a']++;

}if(bfs()) printf("yes\n");

else

printf("no\n");

}return

0;}

附上測試資料

5 5

e.b.s

xxa.e

gx.xc

c…x

***bx

5 5

e.b.s

xxa.e

gx.xc

c….

***bx

5 5

ecb.s

xax.e

gx.xc

ca…

***cx

5 5

xae.s

cxx.e

***xc

caa..

gxxcx

5 5

aee.s

cxx.e

***xc

caa..

gxxcx

5 5

aae.s

cxx.e

***xc

caae.

gxxcx

1 2

sg 1 3

sxg

5 5

sxaxg

.x.x.

.x.x.

.x.xa

…..

5 5

ae..s

bxx.c

xx.cx

gba.b

xxe.e

5 5

a…a

xx.xx

bxsxg

.xaxb

…..

5 5

.x.xg

sa..a

.b.xc

xx0

.b bc…

5 5

.x.xg

sb..b

.b.xc

xx..b

bc…

1 10

s.aabbcc.g

0 0答案

yes

yes

yes

no yes

yes

yes

no yes

yes

yes

yes

no yes

nyoj 82 迷宮尋寶(一)(廣搜)

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

迷宮尋寶(一) 82 (廣搜)

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

NYOJ 迷宮尋寶(一)

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