AcWing-756.蛇形矩阵.

输入两个整数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<bits/stdc++.h>
using namespace std;
int main()
{
    
    
	int n,m;
	cin>>n>>m;
	int dx[]={
    
    -1,0,1,0},dy[]={
    
    0,1,0,-1};
	int q[110][110];
	int i;
	int d=1;
	int x=0,y=0;
	for(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(i=0;i<n;i++)
	{
    
    
		for(int j=0;j<m;j++)
		{
    
    
			cout<<q[i][j]<<" ";
		}
		cout<<endl;
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_51768569/article/details/113358621
今日推荐