今天花了不少时间来研究如何打印一个之字形zigzag矩阵,参考了下http://blog.163.com/[email protected]/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; }
结果:
时间: 2024-10-14 02:16:01