/**解題思路:本來看了這個題是一籌莫展的,仔細考慮一下還是可以寫的,首先要讀懂題目
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必須開啟門,但是,開門之前必須在迷宮裡找到這個開啟這...