# k650. 尋找蜂后 (Queen bee) ##### link: https://zerojudge.tw/ShowProblem?problemid=k650 ###### tags: `toi` `Graph` `BFS` * 這題是一個**三維陣列**的 BFS 尋訪題,但依然不脫離 BFS 的基本框架 ( 程式中的 BFS 函式和一般的 BFS 幾乎無差別 ) * 這題比較 tricky 的點是陣列的**長、寬、高順序不能搞錯** => 第一層陣列是 h;第二層是 l;第三層是 w。 ( 我因為這樣白白吃了 WA ) ```C++= #include <iostream> #include <vector> #include <string> #include <queue> using namespace std; string s; int l,w,h; int ans = 0; char hive[306][306][306] = {}; bool vis[306][306][306] = {}; int d_row[6] = {0,0,0,0,1,-1}; int d_w[6] = {0,0,1,-1,0,0}; int d_l[6] = {1,-1,0,0,0,0}; void BFS(vector<int> h_w_l){ queue<vector<int>> q; int counts = 1; q.push(h_w_l); while (!q.empty()){ int row = q.front()[0]; int w1 = q.front()[1]; int l1 = q.front()[2]; q.pop(); for (int i=0;i<6;i++){ int nh = row+d_row[i]; int nw = w1+d_w[i]; int nl = l1+d_l[i]; if ((0<=nh && nh<h) && (0<=nw && nw<w) && (0<=nl && nl<l) ){ if (hive[nh][nl][nw] == '0' && !vis[nh][nl][nw]){ //if (r_c.first == 0 && r_c.second == 0) cout<<row+d_row[i]<<" "<<col+d_col[i]<<"\n"; q.push({nh,nw,nl}); counts++; vis[nh][nl][nw] = true; } } } } ans = max(ans,counts); } int main() { ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); cin>>l>>w>>h; for (int i=0;i<h;i++){ for (int j=0;j<l;j++){ for (int k=0;k<w;k++){ cin>>hive[i][j][k]; } } } for (int i=0;i<h;i++){ for (int j=0;j<l;j++){ for (int k=0;k<w;k++){ if (hive[i][j][k]=='0' && !vis[i][j][k]){ vis[i][j][k] = true; BFS({i,k,j}); } } } } cout<<ans; return 0; } ```