蛇形矩阵

题目描述

输入两个整数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;
const int N=110;
int n,m,q[N][N];
int main(){
    cin>>n>>m;
    //按照上 右 下 左的顺序
    int dx[4]={-1,0,1,0};
    int dy[4]={0,1,0,-1};
    int d=1,x=0,y=0;
    for(int i=1;i<=n*m;i++){
        q[x][y]=i;
        int a=x+dx[d],b=y+dy[d];
        if(a<0||a>=n||b<0||b>=m||q[a][b]){
            d=(d+1)%4;  
            a=x+dx[d]; b=y+dy[d];
        }
        x=a; y=b;
    }
    
    for(int i=0;i<n;i++){
      for(int j=0;j<m;j++){
          cout<<q[i][j]<<" ";
      }
      cout<<endl;
    }
    return 0;
}
上一篇:蛇形矩阵


下一篇:hdu 1010 Tempter of the Bone(dfs + 奇偶剪枝)