演算法篇-蛇形矩陣

不被看好的青春叫成長發表於2015-04-02

題目:在n*n方陣裡填入1,2,3,···,n*n,要求填成蛇形,例如n=4時方陣為:
                                                       10 11 12 1
                                                       9   16 13 2
                                                       8   15 14 3
                                                       7   6   5   4

上面的方陣中,多餘的空格知識為了便於觀察規律,不必嚴格輸出,n<=8。

程式碼如下:

#include <iostream>
#include <cstring>
#define MAXN 10
using namespace std;
int a[MAXN][MAXN];
int main()
{
    int n,x,y,t=0;
    cin>>n;
    memset(a,0,sizeof(a));
    x=0;
    y=n-1;
    t=a[x][y]=1;
    while (t<n*n)
    {
        while (x+1<n && !a[x+1][y])
            a[++x][y]=++t;
        while (y-1>=0 && !a[x][y-1])
            a[x][--y]=++t;
        while (x-1>=0 && !a[x-1][y])
            a[--x][y]=++t;
        while (y+1<n && !a[x][y+1])
            a[x][++y]=++t;
    }
    for (x=0;x<n;x++)
    {
        int i=0;
        for(y=0;y<n;y++)
        {
            i++;
            if (i!=4)
            cout<<a[x][y]<<"\t";
            else
                cout<<a[x][y]<<endl;
        }
    }
    return 0;

}


執行結果:

 

知識點總結:

這個相當於應用了搜尋,不過比搜尋要簡單,從a[0][n-1]出發,先向下搜尋,如果碰到了已經經過過的位置或者即將越界就換向,由於是從外向內走蛇形盤旋路線,所以轉的方向只有一個。直到最後一個位置,即t==n*n時結束。

相關文章