打印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;
}

結果:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章