我是靠谱客的博主 冷静便当,最近开发中收集的这篇文章主要介绍打印zigzag数组,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

今天花了不少时间来研究如何打印一个之字形zigzag矩阵,参考了下http://blog.163.com/yangjun1988422@126/blog/static/4741291720117842634276/,具体思路和程序在下面。


// test2.cpp : 定义控制台应用程序的入口点。
//Date:2015年6月17日
//Author: jsalienzy
 /*       0  1  5  6 14 15 27 28
  *       2  4  7 13 16 26 29 42
  *       3  8 12 17 25 30 41 43
  *       9 11 18 24 31 40 44 53
  *      10 19 23 32 39 45 52 54
  *      20 22 33 38 46 51 55 60
  *      21 34 37 47 50 56 59 61
  *      35 36 48 49 57 58 62 63      */
//a[0][0],a[0][1],a[1][0],a[2][0],a[1][1],a[0][2],a[0][3]
//zigzag排列顺序
//具体思路:
//1.建立一个动态二维数组用来存储数据
//2.把矩阵分为上下两个半区,左上半区和右下半区
//3.左上半区按行进行遍历,分为奇偶列,偶列依次减小,奇列依次增加(依次表示的是斜的顺序)
//4.右下半区也按行进行遍历,奇从下往上依次增加,偶从下往上依次减小
#include "stdafx.h"
#include <iostream>
#include <iomanip>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	int **data;
	//一个n*n的矩阵,使用动态数组
	int n;
	cout<<"请输入n*n矩阵的行列数:";
	cin>>n;
	data=new int *[n];
	for(int i=0; i<n; i++)
	{
		data[i]=new int [n];
	}
	//初始化二维矩阵
	for(int i=0; i<n; i++)
	{
		for(int j=0; j<n; j++)
		{
			data[i][j]=0;
		}
	}
	int x,y;
	int count=0;
	//左上半区
	for(int i=0; i<n; i++)
	{
		if(i%2==0)
		{
			x=i;
			y=0;
			for(int j=0; j<i+1; j++)
			{
				data[x--][y++]=count++;
			}
		}
		if(i%2==1)
		{
			x=0;
			y=i;
			for(int j=0; j<i+1; j++)
			{
				data[x++][y--]=count++;
			}
		}
	}

	//右下半区
	for(int i=1; i<n; i++)
	{
		if(i%2==0)
		{
			x=i;
			y=n-1;
			for(int j=0; j<n-i; j++)
			{
				data[x++][y--]=count++;
			}
		}
		if(i%2==1)
		{
			x=n-1;
			y=i;
			for(int j=0; j<n-i; j++)
			{
				data[x--][y++]=count++;
			}
		}
	}

	//打印二维矩阵
	for(int i=0; i<n; i++)
	{
		for(int j=0; j<n; j++)
		{
			cout<<setw(5)<<data[i][j]<<" ";
		}
		cout<<endl;
	}
	//销毁二维矩阵
	for(int i=0; i<n; i++)
	{
		delete [] data[i];
	}
	delete [] data;
	system("pause");
	return 0;
}

结果:


最后

以上就是冷静便当为你收集整理的打印zigzag数组的全部内容,希望文章能够帮你解决打印zigzag数组所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部