码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2014-12-19 20:33:32      阅读:212      评论:0      收藏:0      [点我收藏+]

标签:

Problem Description

输出n*m的回型矩阵

Input

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

Output

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

Sample Input

4 3

Sample Output

 1  2  3
10 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——回型矩阵

标签:

原文地址:http://www.cnblogs.com/liuwt365/p/4174647.html

(1)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!