給定 n,生成 n×n 蛇形矩陣。數字從 1 開始,從中心向外呈順時針/逆時針螺旋填充。示例(n=3):
7 8 1
6 9 2
5 4 3
矩陣可分解為同心層。每層包含四條邊,按順序填充:
用變量 i 統一控制四條邊的填充步數,大幅簡化邏輯。
void fillLayer(int c1, int c2) { // c1=層起始行/列, c2=層終止行/列
if (c1 == c2) { a[c1][c2] = element++; return; } // 中心單元格
int i = -1;
while (++i < c2 - c1) a[c1][c1 + i] = element++; // 上
i = -1;
while (++i < c2 - c1) a[c1 + i][c2] = element++; // 右
i = -1;
while (++i < c2 - c1) a[c2][c2 - i] = element++; // 下
i = -1;
while (++i < c2 - c1) a[c2 - i][c1] = element++; // 左
}
int main() {
int n; cin >> n;
int center = 0;
while (center <= n - 1 - center) {
fillLayer(center, n - 1 - center);
center++;
}
// 輸出矩陣...
}
代碼結構相似,僅填充順序與方向不同。核心仍是「層」與「四邊統一步數」的思想。
i 遍歷四條邊,避免重複邊界計算。n 為奇數時)。此類矩陣構造題,關鍵在於找到規律性的填充順序,並用極簡代碼表達幾何邏輯。