nyoj 82 迷宮尋寶(一)BFS

2021-07-30 11:17:40 字數 1501 閱讀 6236

/**解題思路:本來看了這個題是一籌莫展的,仔細考慮一下還是可以寫的,首先要讀懂題目

1.寶藏在地圖裡可能被門鎖,也可能不被門鎖。

2.要想開門必須找到地圖中所有的鑰匙才能開門。

下面就是解題了,首要任務就是要找到所有的鑰匙,

在找鑰匙的途中如果遇到能開的門就給開了,如果能遇到寶藏就直接返回true,

如果不能的話就判斷有沒有鎖和鑰匙能不能全部找到,如果有鑰匙且能夠全部找到的話就再次廣搜,

把能開的門都給開了,看途中能否遇到寶藏,如果遇到就返回true 以此類推將5個門都找一遍,如果還沒找到寶藏就輸出n0

#include #include using namespace std;

struct node

;int m,n,a,b,c,d,e,sx,sy,ex,ey;

char map[25][25];

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

int bfs()

else

if(map[next.x][next.y]=='b')

else

if(map[next.x][next.y]=='c')

else

if(map[next.x][next.y]=='d')

else

if(map[next.x][next.y]=='e')

else

if(map[next.x][next.y]=='a')

}else

if(map[next.x][next.y]=='b')

}else

if(map[next.x][next.y]=='c')

}else

if(map[next.x][next.y]=='d')

}else

if(map[next.x][next.y]=='e')}}

}}

return0;}

int used[10];///用來判斷是不是有這個鑰匙

int main()

int ans;

memset(used,0,sizeof(used));

if(a==0)used[1]=1;

if(b==0)used[2]=1;

if(c==0)used[3]=1;

if(d==0)used[4]=1;

if(e==0)used[5]=1;

ans = bfs();

if(ans==1)

cout<<"yes"

else

if(b==0&&used[2]==0)

else

if(c==0&&used[3]==0)

else

if(d==0&&used[4]==0)

else

if(e==0&&used[5]==0)

else

break;

}if(ans)cout<<"yes"

0;}

NYOJ82 迷宮尋寶(一) BFS

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

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必須開啟門,但是,開門之前必須在迷宮裡找到這個開啟這...