首页 > 代码库 > 武汉科技大学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——回型矩阵
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。