对于下面的4×4的矩阵,
1 5 3 9
3 7 5 6
9 4 6 4
7 3 1 3
对其进行Z字形扫描后得到长度为16的序列:
1 5 3 9 7 3 9 5 4 7 3 6 6 4 1 3
请实现一个Z字形扫描的程序,给定一个n×n的矩阵,输出对这个矩阵进行Z字形扫描的结果。
输入格式
输入的第一行包含一个整数n,表示矩阵的大小。
输入的第二行到第n+1行每行包含n个正整数,由空格分隔,表示给定的矩阵。
输出格式
输出一行,包含n×n个整数,由空格分隔,表示输入的矩阵经过Z字形扫描后的结果。
样例输入
4
1 5 3 9
3 7 5 6
9 4 6 4
7 3 1 3
样例输出
1 5 3 9 7 3 9 5 4 7 3 6 6 4 1 3
评测用例规模与约定
1≤n≤500,矩阵元素为不超过1000的正整数。
1 #include<iostream> 2 using namespace std; 3 //找规律 4 int direction[4][2]={0,1,1,-1,1,0,-1,1}; 5 int table[501][501]; 6 int main(){ 7 int i,j,n; 8 cin>>n; 9 for(i=0;i<n;i++){ 10 for(j=0;j<n;j++){ 11 cin>>table[i][j]; 12 } 13 } 14 i=0; 15 j=0; 16 cout<<table[0][0]<<‘ ‘; 17 while(i!=n-1||j!=n-1){ 18 if(j!=n-1){ 19 i+=direction[0][0]; 20 j+=direction[0][1]; 21 }else{ 22 i+=direction[2][0]; 23 j+=direction[2][1]; 24 } 25 cout<<table[i][j]<<‘ ‘; 26 if(i==n-1&&j==n-1){ 27 break; 28 } 29 while(j!=0&&i!=n-1){ 30 i+=direction[1][0]; 31 j+=direction[1][1]; 32 cout<<table[i][j]<<‘ ‘; 33 } 34 if(i!=n-1){ 35 i+=direction[2][0]; 36 j+=direction[2][1]; 37 }else{ 38 i+=direction[0][0]; 39 j+=direction[0][1]; 40 } 41 cout<<table[i][j]<<‘ ‘; 42 if(i==n-1&&j==n-1){ 43 break; 44 } 45 while(i!=0&&j!=n-1){ 46 i+=direction[3][0]; 47 j+=direction[3][1]; 48 cout<<table[i][j]<<‘ ‘; 49 } 50 } 51 cout<<"\b\n"; 52 return 0; 53 }
时间: 2024-10-11 03:51:07