首页 > 代码库 > 武汉科技大学ACM:1008: 零起点学算法64——回型矩阵

武汉科技大学ACM:1008: 零起点学算法64——回型矩阵

Problem Description

输出n*m的回型矩阵

Input

多组测试数据
每组输入2个整数 n和m(不大于20)  

Output

输出n*m的回型矩阵,要求左上角元素是1,(每个元素占2个位置,靠右) 

Sample Input

4 3

Sample Output

 1  2  310 11  4 9 12  5 8  7  6

  1 #include<iostream>  2 #include<string.h>  3 #include<iomanip>  4 using namespace std;  5 int main()  6 {  7     int m,n,i,j,k,lastX,lastY;  8     while(cin>>m>>n)  9     {         10         int **a=new int*[m]; 11         for(i=0;i<m;i++) 12         { 13             *(a+i)=new int[n]; 14             memset(a[i],0,n*sizeof(int)); 15         } 16         i=0,j=0,k=0; 17         int state=0;//0 为从左到右赋值,1为从上到下,2为从右到左,3为从下到上 18         while(k<m*n) 19         {//要赋值m*n次 20             switch(state) 21             { 22             case 0: 23                 for(;j<n;++j) 24                 { 25                     if(a[i][j]==0) 26                     { 27                         a[i][j]=k+1; 28                         ++k; 29                         lastX=i; 30                         lastY=j;//记录下一次赋值开始位置 31                     } 32                 } 33                 i=lastX+1; 34                 j=lastY; 35                 state=1; 36                 break; 37             case 1: 38                 for(;i<m;++i) 39                 { 40                     if(a[i][j]==0) 41                     { 42                         a[i][j]=k+1; 43                         ++k; 44                         lastX=i; 45                         lastY=j; 46                     } 47                 } 48                 i=lastX; 49                 j=lastY-1; 50                 state=2; 51                 break; 52             case 2: 53                 for(;j>=0;--j) 54                 { 55                     if(a[i][j]==0) 56                     { 57                         a[i][j]=k+1; 58                         ++k; 59                         lastX=i; 60                         lastY=j; 61                     } 62                 } 63                 i=lastX-1; 64                 j=lastY; 65                 state=3; 66                 break; 67             case 3: 68                 for(;i>=0;--i) 69                 { 70                     if(a[i][j]==0) 71                     { 72                         a[i][j]=k+1; 73                         ++k; 74                         lastX=i; 75                         lastY=j; 76                     } 77                 } 78                 i=lastX; 79                 j=lastY+1; 80                 state=0; 81                 break; 82             default: 83                 break;             84             } 85              86         } 87          88         for(i=0;i<m;i++) 89         { 90             for(j=0;j<n;j++) 91                 if(j==0) 92                 { 93                     cout<<setw(2)<<a[i][j]; 94                 } 95                 else 96                 { 97                     cout<<setw(3)<<a[i][j]; 98                 }                 99                 cout<<endl;100                 delete []a[i];101         }102         delete []a;103         104     }105     return 0;106 }

 

武汉科技大学ACM:1008: 零起点学算法64——回型矩阵