zoukankan      html  css  js  c++  java
  • 【基础题】蛇形填数

    题目描述

    在n*n方陈里填入1,2,...,n*n,要求填成蛇形。例如n=4时方陈为:
    10 11 12 1
    9 16 13 2
    8 15 14 3
    7 6 5 4

    输入

    直接输入方阵的维数,即n的值。(n<=100)

    输出

    输出结果是蛇形方陈。

    样例输入

    3

    样例输出

    7 8 1
    6 9 2
    5 4 3

    先说一下我的思路,
    我把n=4时的情况列了出来,发现了奇数时,j变化,偶数时,i变化等变化规律,后来我发现需要总结很多变化规律才能算数来,总结出了n=4的,n=5时又不一样了,哎,头疼(小白的思路。。)
    大神们的思路:

    这是个4连通问题。
    针对每个方阵中的格子,与它四连通相邻的格子有4个:左右和上下;
    要想访问它们有四个方向:向下y坐标加1,纵坐标加0,记为(0,1),顺时针是向左(-1,0),然后是(0,-1),最后是(1,0);可用一个方向数组存储这四个方向,切换时按顺序选取。
    数组开设好,填充为0值;
    种子格子为数组右上方元素填入第一个计数1,下面第一方向为(0,1),按照这个方向如果发现新格子在数组坐标内且其值为0,则进行填充,再按照方向继续填充;
    如果发现上面条件不满足换第二个方向(-1,0)继续填充;
    直到当前格子的四个方向均不满足填充条件时结束。
    这样得到的就是所谓蛇形填数的结果,而且与方阵尺寸无关。

    ②这个方法比较容易理解而且也简单不过只能对这个题:
    数组开设好,填充0,遍历先右下,再左,再左上,再右。遍历过的设为1,即能实现蛇形遍历。

    核心代码:
    while (val<n*n)  
        {  
            while (x+1<n && !a[x+1][y])   a[++x][y]=++val;  
            while (y-1>=0 && !a[x][y-1])  a[x][--y]=++val;  
            while (x-1>=0 && !a[x-1][y])  a[--x][y]=++val;  
            while (y+1<n && !a[x][y+1])   a[x][++y]=++val;  
        }  

    完整代码如下:

    #include <cstdio>  
    #include <cstring>  
    #define MAXN 10  
    int a[MAXN][MAXN];  
    int main()  
    {  
        int n, x, y, val=0;  
        scanf("%d",&n);  
        memset(a,0,sizeof(a));// clear array  
        val=a[x=0][y=n-1]=1;// set the first element  
        while (val<n*n)  
        {  
            while (x+1<n && !a[x+1][y])   a[++x][y]=++val;  
            while (y-1>=0 && !a[x][y-1])  a[x][--y]=++val;  
            while (x-1>=0 && !a[x-1][y])  a[--x][y]=++val;  
            while (y+1<n && !a[x][y+1])   a[x][++y]=++val;  
        }  
        for (x=0; x<n; ++x)  
        {  
            for (y=0; y<n; ++y)  
            {  
                printf("%3d",a[x][y]);  
            }  
            printf("
    ");  
        }  
        return 0;  
    }


    祝你早日攒够失望,然后开始新的生活。
  • 相关阅读:
    VB.net和c#利用IOleCommandTarget接口实现Html编辑器的Glyphs(原创)
    vb.net中用com通讯实现对HTMLDocument的事件捕捉(原创)
    自己写的用JS脚本定时执行Web地址并且得到它的源代码的页面程序
    Alice:曾经的CS反恐精英顶尖高手
    .net利用IOleCommandTarget接口实现Html编辑器表格边框的显示和隐藏(原创)
    ASP用语法及函数
    最近在研究质量统计与分析方面的项目开发
    propertyGrid实现选项(原创)
    .Net平台AOP技术研究
    c# propertyGrid属性控件跟Htmlelement元素绑定(原创精华)
  • 原文地址:https://www.cnblogs.com/LuRenJiang/p/6938420.html
Copyright © 2011-2022 走看看