每日一题(蛇形矩阵)

在这里插入图片描述

#include<iostream>
using namespace std;
int main(){
	
	int n,m,a[110][110],x=1,y=1,i=1;//数组a存蛇形矩阵中的数
	cin>>n>>m;
	int st[110][110]={0};//数组st对存入数组a的数进行标记
	st[1][m+1]=1,st[n+1][m]=1,st[n][0]=1;//对开始的转折点进行标记
	while(i){
	        //将1~n*m按照从左往右,从上往下,从右往左,从下往上即的顺序依次存入数组a
			if(y<=m){
			//从左往右存入
				for(int j=y;;j++){
				if(st[x][j]==1)break;//如果该数标记了就跳出循环
				a[x][j]=i++;//i赋值给a[x][j]后自加1
				st[x][j]=1;//标记数组a[x][j]存过数字
				y=j;//更新坐标y
				}
			} 
			x++;
			if(x<=n){
			//从上往下存入
				for(int j=x;;j++){
					if(st[j][y]==1)break;
					a[j][y]=i++;
					st[j][y]=1;
					x=j;
				}
			}
			y--;
			if(y>=1){
			//从右往左存入
				for(int j=y;;j--){
					if(st[x][j]==1)break;
					a[x][j]=i++;
					st[x][j]=1;
					y=j;
				}
			}
			x--;
	     	if(x>=1){
	     	//从下往上存入
				for(int j=x;;j--){
					if(st[j][y]==1)break;
					a[j][y]=i++;
				    st[j][y]=1;
				    x=j;
			    }
			}	
			y++;
			if(i==(n*m+1) )break;
	}
	//输出存入的数
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++)
		cout<<a[i][j]<<' ';
		cout<<endl;
	}
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值