蛇形矩阵

大兔子大兔子 提交于 2020-01-17 23:18:50

蛇形矩阵

输入两个整数n和m,输出一个n行m列的矩阵,将数字 1 到 n*m 按照回字蛇形填充至矩阵中。
具体矩阵形式可参考样例。

输入格式
输入共一行,包含两个整数n和m。

输出格式
输出满足要求的矩阵。
矩阵占n行,每行包含m个空格隔开的整数。

数据范围
1≤n,m≤100

输入样例:

3 3

输出样例:

1 2 3
8 9 4
7 6 5

解法:

#include <iostream>
using namespace std;
int main()
{
    int n,m,a[110][110],i,j,x=0,y=0,dir=1;//dir表示方向,1右,2下,3左,4上
    cin>>n>>m;
    for(i=1;i<=n*m;i++)                   //因为共有n*m个数字要填,所以循环n*m次
    {
        a[x][y]=i;                        //x为纵坐标,y为横坐标
        switch(dir)
        {
            case 1:if(y+1<m&&a[x][y+1]==0) y++;else {dir=2;x++;}break;//如果没有越界则按照方向继续,否则转向走
            case 2:if(x+1<n&&a[x+1][y]==0) x++;else {dir=3;y--;}break;
            case 3:if(y-1>=0&&a[x][y-1]==0) y--;else {dir=4;x--;}break;
            case 4:if(x-1>=0&&a[x-1][y]==0) x--;else {dir=1;y++;}break;
        }
    }
    for(i=0;i<n;i++)
    {
        for(j=0;j<m;j++) cout<<a[i][j]<<' ';
        cout<<endl;
    }
}

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!