首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

螺旋方陣 C 語言實現:順時針與逆時針雙版本代碼詳解

     編輯:關於C語言

核心思想

分層填充:從外向內,每層四條邊依次賦值。關鍵變量:
n 當前層號(0 起),m 當前填充值,N 矩陣階數。
每層邊長 = N - 2n。

順時針版本

#define N 5
void main() {
    int a[N][N] = {0}, m = 1;
    for (int n = 0; n <= N/2; n++) {
        for (int j = n; j < N-n; j++) a[n][j] = m++;           // 上邊 ←→
        for (int i = n+1; i < N-n; i++) a[i][N-n-1] = m++;     // 右邊 ↓
        for (int j = N-n-2; j >= n; j--) a[N-n-1][j] = m++;    // 下邊 →←
        for (int i = N-n-2; i > n; i--) a[i][n] = m++;         // 左邊 ↑
    }
    // 輸出矩陣
}

逆時針版本

for (int n = 0; n <= N/2; n++) {
    for (int j = n; j < N-n; j++) a[j][n] = m++;           // 左邊 ↓
    for (int i = n+1; i < N-n; i++) a[N-n-1][i] = m++;     // 下邊 ←→
    for (int j = N-n-2; j >= n; j--) a[j][N-n-1] = m++;    // 右邊 ↑
    for (int i = N-n-2; i > n; i--) a[n][i] = m++;         // 上邊 →←
}

關鍵區別對照

邊順時針逆時針
第1邊上:行固定 n,列 n→N-n-1左:列固定 n,行 n→N-n-1
第2邊右:列固定 N-n-1,行 n+1→N-n-1下:行固定 N-n-1,列 n+1→N-n-1
第3邊下:行固定 N-n-1,列 N-n-2→n右:列固定 N-n-1,行 N-n-2→n
第4邊左:列固定 n,行 N-n-2→n+1上:行固定 n,列 N-n-2→n+1

N=5 輸出驗證

順時針

  1  2  3  4  5
 16 17 18 19  6
 15 24 25 20  7
 14 23 22 21  8
 13 12 11 10  9

逆時針

  1 16 15 14 13
  2 17 24 23 12
  3 18 25 22 11
  4 19 20 21 10
  5  6  7  8  9

擴展思路

  • 改變起始值/方向/步長 → 變體螺旋
  • 矩形矩陣(M×N)邊界條件調整
  • 原地旋轉已有矩陣(LeetCode 48)同層四元組交換邏輯

掌握分層四邊循環不變量,螺旋矩陣問題迎刃而解。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved