1. 程式人生 > >陣列之蛇型矩陣程式碼(一)

陣列之蛇型矩陣程式碼(一)

我在多次的演算法比賽中遇到了蛇型矩陣問題都沒有做出來,今天我在《演算法競賽入門經典》這本書上看到了,一段優美的解決蛇型矩陣問題的程式碼。請原諒我的無知,我看的程式碼少寫的程式碼也不多。如果你認為這段程式碼不好不優美請多多指教。我在這裡謝謝大家了。

#include<stdio.h>
#include<string.h>
#define MAXN 10
//定義一個數組用於儲存最後的結果
int a[MAXN][MAXN];
int main()

{  
    //n:實際蛇形矩陣的大小,x,y用來訪問蛇形矩陣的資料,tot用來表示儲存儲存蛇形矩陣在x,y座標下的值
    int n,x,y,tot=0; 
    scanf("%d",&n);
    //將陣列a清零
    memset(a,0,sizeof(a));
    //這個語句有進行了三個操作,為x,y進行初始化,確定了蛇形矩陣在初始點的值,初始化tot
    tot=a[x=0][y=n-1]=1;
    //蛇行矩陣內的值不會超過n*n
    while(tot<n*n)
    {
     // x+1<n表示在Y座標不變,x座標增大的情況下,X的座標不會大於使用者設定的範圍
     //a[x+1][y]表示在Y座標不變,x座標增大的情況下,保證內圈始終被外圈包圍。外圈的值被定義下來就不會被覆蓋。
     //下面的程式碼思路一樣的
     while(x+1<n&&!a[x+1][y]) a[++x][y]=++tot;
     while(y-1>=0&&!a[x][y-1]) a[x][--y]=++tot;
     while(x-1>=0&&!a[x-1][y]) a[--x][y]=++tot;
     while(y+1<=n&&!a[x][y+1]) a[x][++y]=++tot;
    }
    //輸出結果
    for(x=0;x<n;x++)
     { for(y=0;y<n;y++) 
	 {printf("%3d ",a[x][y]);
	 }
     printf("\n");
     }
    
    
    return 0;
	}

    大概就是這樣了,這是我第一次寫部落格。我知道我的部落格有很多問題,還請大家幫我指出來。我在這裡先謝謝大家了。