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

C語言實現蛇形填數矩陣:右→下→左→上螺旋遍歷算法

     編輯:關於C語言

C語言實現蛇形填數矩陣:右→下→左→上螺旋遍歷算法

蛇形填數(螺旋矩陣)是經典算法訓練題:在 N×N 矩陣中按順時針螺旋順序填入 1..N²。本文給出簡潔 C 實現,核心思路「右→下→左→上」四個 while 迴圈交替推進,邊界條件為 下一格未越界且未被填寫。

一、算法邏輯

  1. 初始化 a[N][N] = {0},起點 (0,0) 填 1。
  2. 當 num < N*N 循環:
    向右:while (j+1 < N && a[i][j+1]==0) a[i][++j] = ++num;
    向下:while (i+1 < N && a[i+1][j]==0) a[++i][j] = ++num;
    向左:while (j-1 >= 0 && a[i][j-1]==0) a[i][--j] = ++num;
    向上:while (i-1 >= 0 && a[i-1][j]==0) a[--i][j] = ++num;
  3. 打印矩陣。

二、完整代碼

#include 
#include 

int a[10][10]; // 假設 N ≤ 10

int main() {
    int i, j, n, num = 0;
    memset(a, 0, sizeof(a));
    scanf("%d", &n);
    num = a[i=0][j=0] = 1;
    while (num < n*n) {
        while (j+1 < n && a[i][j+1] == 0) a[i][++j] = ++num; // 右
        while (i+1 < n && a[i+1][j] == 0) a[++i][j] = ++num; // 下
        while (j-1 >= 0 && a[i][j-1] == 0) a[i][--j] = ++num; // 左
        while (i-1 >= 0 && a[i-1][j] == 0) a[--i][j] = ++num; // 上
    }
    for (i = 0; i < n; i++) {
        for (j = 0; j < n; j++) {
            printf("%d ", a[i][j]);
        }
        printf("\n");
    }
    return 0;
}

三、關鍵點解析

  • 邊界檢查:j+1 < n 防越界,a[i][j+1]==0 防重寫。
  • 原地修改索引:++j、--i 等前綴運算緊湊高效。
  • 終止條件:num == n*n 時四個方向均無法推進,循環自然結束。
  • 複雜度:時間 O(N²),空間 O(N²) 存矩陣。

四、擴展思考

  1. 輸出格式調整:題目若要求無尾隨空格,打印迴圈內判斷 j==n-1。
  2. 大矩陣優化:可用方向向量數組 dx[4]={0,1,0,-1}, dy[4]={1,0,-1,0} 統一四方向邏輯,減少重複代碼。
  3. 逆時針/不同起點:調整方向順序與初始位置即可。

五、總結

蛇形填數通過「邊界+已訪問」雙重檢查驅動方向轉向,代碼極短卻完美演示狀態機思想。掌握此模板,可輕鬆應對螺旋矩陣遍歷、生成、路徑查找等變體題目。

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