1. 程式人生 > >山東科技大學OJ蛇形填陣

山東科技大學OJ蛇形填陣

 

 

 蛇形填陣問題主要利用二維陣列解決,但賦值是一大難題,只要掌握了這條“蛇”的運動方向就可以輕鬆搞定啦,這裡用到了平常不常用的++shu操作,意思就是先用這個數在實行++操作。

            while (x + 1 < n && !a[x + 1][y]) a[++x][y] = ++shu;
            while (y - 1 >= 0 && !a[x][y - 1]) a[x][--y] = ++shu;
            while (x - 1 >= 0 && !a[x - 1][y]) a[--x][y] = ++shu;
            while (y + 1 < n && !a[x][y + 1]) a[x][++y] = ++shu;

第一行就是蛇從右上角向右下角運動時的賦值;

第二行就是蛇從右下角向左下角運動時的賦值;

第三行就是蛇從左下角向左上角運動時的賦值;

第四行就是蛇從左上角向右上角運動時的賦值;

。。。。。。。。。。。。。。。。。。。。

依次這樣迴圈直到數達到了n*n就停止。

 

喏~~~程式碼來啦!!!!!

#include<stdio.h>
#include<string.h>
#define maxn 55
int main()
{
    int a[maxn][maxn];
    //freopen("output.txt","w",stdout);
    int n, x, y, shu = 0;
    int i,j,k;
    while(scanf("%d", &n)==1)
    {
        memset(a, 0, sizeof(a));
        a[x = 0][y = n - 1] = shu = 1;
        while (shu < n * n)
        {
            while (x + 1 < n && !a[x + 1][y]) a[++x][y] = ++shu;
            while (y - 1 >= 0 && !a[x][y - 1]) a[x][--y] = ++shu;
            while (x - 1 >= 0 && !a[x - 1][y]) a[--x][y] = ++shu;
            while (y + 1 < n && !a[x][y + 1]) a[x][++y] = ++shu;
        }
        for(i=0;i<n;i++)
        {
            printf("%d",a[i][0]);
            for(j=1;j<n;j++)
                printf(" %d",a[i][j]);
            printf("\n");
        }
        printf("\n");
    }
    return 0;
}

希望大家多多關注,小鑫會很努力地寫部落格的,我在這給各位大爺跪下了     噗通~~~~~~!