陣列之蛇型矩陣程式碼(一)
阿新 • • 發佈:2018-12-03
我在多次的演算法比賽中遇到了蛇型矩陣問題都沒有做出來,今天我在《演算法競賽入門經典》這本書上看到了,一段優美的解決蛇型矩陣問題的程式碼。請原諒我的無知,我看的程式碼少寫的程式碼也不多。如果你認為這段程式碼不好不優美請多多指教。我在這裡謝謝大家了。
#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; }
大概就是這樣了,這是我第一次寫部落格。我知道我的部落格有很多問題,還請大家幫我指出來。我在這裡先謝謝大家了。