zigzag二维数组的代码

#include<iostream>
#include<Windows.h>

bool en=true;//用来记录数组前进的方向,true代表向右上角前进,false代表向左下角前进
int** zigzag(int n)
{
	if(n<1)return (int**)(-1);
	int** brick=new int *[n];
	for(int l=0;l<n;l++)
	{
		brick[l]=new int[n];
	}
	int i=0,j=0,mark=0;
	brick[i][j]=0;
	while((i!=n-1)&&(j!=n-1))
	{
		for(int k=0;k<n*n-1;k++)
		{
			if(en==true&&i==0&&j!=n-1)//<span style="font-family: Arial, Helvetica, sans-serif;">判断是否往右上走到碰到上边缘并且不是右上角</span>
			{
				brick[i][++j]=++mark;
				en=false;
			}
			else if(en==true&&i==0&&j==n-1)//<span style="font-family: Arial, Helvetica, sans-serif;">判断是否往右上走到头并且是右上角</span>
                        {
				brick[++i][j]=++mark;
				en=false;
			}
			else if(en==true&&j==n-1)//判断是否往右上走碰到右边缘
			{
				brick[++i][j]=++mark;
				en=false;
			}
			else if(en==false&&j==0&&i!=n-1)//判断是否往左下走碰到左边缘并且不是左下角
			{
				brick[++i][j]=++mark;
				en=true;
			}
			else if(en==false&&j==0&&i==n-1)//判断是否往左下走碰到左边缘并且是左下角
			{
				brick[i][++j]=++mark;
				en=true;
			}
			else if(en==false&&i==n-1)//判断是否往左下走碰到下边缘
			{
				brick[i][++j]=++mark;
				en=true;
			}
			else if(en==true)//正常往右上走
			{
				brick[--i][++j]=++mark;
			}
			else if(en==false)//正常往左下走
			{
				brick[++i][--j]=++mark;
			}
			else//出错了就骂自己
			{
				std::cout<<"stupid!\n";
			}
		}
	}
	return brick;
}

int main()
{
	int haha=10;//设置haha的值可以输出边长为n的zigzag数组
	int** zhuantou=zigzag(haha);
	for(int m=0;m<haha;m++)
	{
		for(int n=0;n<haha;n++)
		{
			std::cout<<zhuantou[m][n]<<" ";
		}
		std::cout<<std::endl;
	}
	for(int m=0;m<haha;m++)
	{
		delete [] zhuantou[m];
	}
	delete [] zhuantou;
	system("pause");
	return 0;
}


=。=今天看了个zigzag数组的实现,于是打算自己写个,智商不高于是就按着数组变化的实际规律按照顺序撸了个代码

zigzag数组是类似于以下规律的数组

0   1   5   6

2   4   7   12

3   8   11  13

9  10  12  14 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值