题目描述
输入两个整数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
四个走向(0,1)向右(1,0)向下(0,-1)向左(-1,0)向上,用数组来存dx[5]={0,1,0,-1},dy[5]={1,0,-1,0}
一直向左走碰到墙(a>n)就拐弯,向下走碰到墙(b>m)就拐弯,向左走碰到墙(a<0)就拐弯,向上走碰到已经走过的(q[a][b]不等于0,因为初值为0)就拐弯。
#include <iostream>
#include <cmath>
#include <cstdio>
using namespace std;
int dx[5]={0,1,0,-1},dy[5]={1,0,-1,0};
int n,m;
int x,y,a,b,d=0;
int q[105][105];
int main(int argc, char** argv) {
scanf("%d%d",&n,&m);
for(int i=1;i<=n*m;i++){
q[x][y]=i;
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;
}
printf("%d",q[i][j])
return 0;
}