一開始照着二維數組的邏輯去做,按照周圍八個點的順序周遊,居然 PA 也有 21 分... 後來自己找了好幾個例子仍然沒辦法通過,這一看晴神的解析才發現這題是按三維數組去做的,而且周遊順序是題目 Figure-1 的那 6 個點,emmm
三維數組大緻如下( z 軸我隻畫了兩層):

/* 看到 BFS() 要想到 */
1、晴神給的模闆
2、坐标點的有效條件
3、什麼樣的坐标點才算是 "附近的點"
對于這道題,這樣填充套模闆:
/* 1、晴神給的模闆 */
int bfs(起點s) {
/* 起點入隊 */
queue<node_t> q;
q.push(s);
inq[坐标點] = true;
while (!q.empty()) {
/* 通路隊頭,然後出隊 */
node_t top = q.front();
q.pop();
/* bfs() 周遊 */
for (周遊 top 周圍) {
if (這個坐标點有效) {
入隊(這個坐标點);
inq[這個坐标點] = true;
}
}
}
}
(由于這道題要數點,是以後面要稍微改改,需要在 BFS() 的同時記錄周遊到的 "有效" 點的數量)
模闆中主要關注兩處:1) for() 循環條件:"周遊 top 周圍";2) for() 循環裡面的 if() 的條件:"坐标點有效":
/* 2、坐标點的有效條件 */
bool isValid(坐标點的各次元坐标..) {
if (越界) return false;
if (該坐标點等于 0 || 該坐标點入隊過) return false;
return true;
}
/* 3、什麼樣的坐标點才算是 "附近的點" */
這道題是六個方位:左、右、前、後、上、下
根據這些邏輯填充好模闆就 ojbk
點選擷取完整代碼