蛇形矩阵

题目:这个蛇形方阵大家都知道吧?不知道就看下面的矩阵找规律

蛇形方阵

【问题描述】

输入n,n≤100。输出n阶蛇形方阵。例如n=5时,输出如下:

1        2        6        7       15

 3        5        8       14       16

 4        9       13       17       22

10       12       18       21       23

11       19       20       24       25

算法:

1、那个先说一下,最近学了STL库的动态数组,是用这个编的(STL动态数组vector),有一些句子可以用后面注释着的替换,请各位原谅。

2、本算法就是纯模拟,没有用任何优化,各路高手请勿吐槽。

3、其实这个东西用心还是能找到规律的,当x、y坐标都为奇数或都为偶数时,往↗右上走,撞墙就往右或下走;

当x、y坐标一奇一偶时,往↙左下走,撞墙就往下或右走;(右或下 和 下或右是不一样的,右或下是不能右再下,反之亦然)

标程:

#include<bits/stdc++.h>
using namespace std;
int i,j,zi,n;
int main()
{
    scanf("%d",&n);
    vector<vector<int> >a;//就是定义一个数组a,可以写为:int a[10000][100000];
    a.resize(n);//这个要是用int a[][]定义,就不要了。
    for (i=0;i<n;i++)a[i].resize(n);//这个要是用int a[][]定义,就不要了。
    i=0;j=0;zi=0;
    while(zi<n*n)
    {
        zi++;
        a[i][j]=zi;
        if ((i%2==0&&j%2==0)||(i%2==1&&j%2==1))
        {
            if (j!=n-1)
            {
                i-=1;
                j+=1;
            }
            else
            {
                i+=1;
            }
        }
        else
        if (((i%2==0)&&(j%2==1))||((i%2==1)&&(j%2==0)))
        {
            if (i!=n-1)
            {
                i+=1;
                j-=1;
            }
            else
            {
                j+=1;
            }
        }
        if(i<0)i=0;
        if (j<0)j=0;
    }
    for (i=0;i<n;i++)
    {
        for (j=0;j<n;j++)
        {
            cout<<setw(5)<<a[i][j];//场宽输出,这个就是输出那个数,不足补空格
        }
        cout<<endl;
    }
    return 0;
}

原文链接: https://www.cnblogs.com/leonqqs/p/7470724.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    蛇形矩阵

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/259140

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月14日 下午12:31
下一篇 2023年2月14日 下午12:31

相关推荐