旋转数阵

// 双转向旋转方阵递归设计  

#include <stdio.h>

int n,a[20][20]={0};

void main()

{ int h,v,b,p,s,d;

printf("  请选择方阵阶数n:");

scanf("%d",&n);

printf("  请选择转向,顺转1,逆转2:");

scanf("%d",&p);

b=1;s=n;d=1;

void t(int b,int s,int d);  // 递归函数说明  

t(b,s,d);

if(p==1)                    // 按要求输出旋转方阵  

   printf("   %d阶顺转方阵: \n",n);

else

   printf("   %d阶逆转方阵: \n",n);

for(h=1;h<=n;h++) 

  { for(v=1;v<=n;v++) 

    if(p==1)

       printf(" %3d",a[h][v]);

    else 

       printf(" %3d",a[v][h]);

    printf("\n");

   }

return;

}

void t(int b,int s,int d)    // 定义递归函数  

{ int j,h=b,v=b;

if(s==0) return;             // s=0,1时为递归出口  

if(s==1) 

{ a[b][b]=d;return;}

for(j=1;j<s;j++)             // 一圈的上行从左至右递增    

{ a[h][v]=d;v++;d++;}

for(j=1;j<s;j++)             // 一圈的右列从上至下递增    

{ a[h][v]=d;h++;d++;}

for(j=1;j<s;j++)             // 一圈的下行从右至左递增    

{ a[h][v]=d;v--;d++;}

for(j=1;j<s;j++)             // 一圈的左行从下至上递增    

{ a[h][v]=d;h--;d++;}

t(b+1,s-2,d);                // 调用内圈递归函数  

}

 

// m×n顺转矩阵递归设计 

#include <stdio.h>

int m,n,a[20][20]={0};

void main()

{ int h,v,b,s,d;

printf("  数阵为m行n列,请确定m,n:");scanf("%d,%d",&m,&n);

s=m>n?n:m;

b=1;d=1;

void t(int b,int s,int d);  // 递归函数说明  

t(b,s,d);                   // 调用递归函数  

printf("   %d×%d顺转矩阵: \n",m,n);

  for(h=1;h<=m;h++) 

    {for(v=1;v<=n;v++) 

       printf(" %3d",a[h][v]);

     printf("\n");

    }

  return; 

}

void t(int b,int s,int d)        // 定义递归函数  

{ int j,h=b,v=b;

if(s<=0) return;                 // 递归出口 

if(s==1 && m==n) // n=m且n为奇数时的递归出口

   { a[h][v]=d;return;} 

for(j=1;j<=n+1-2*b;j++)          // 一圈的上行从左至右递增    

{ a[h][v]=d;v++;d++;}

for(j=1;j<=m+1-2*b;j++)          // 一圈的右列从上至下递增    

{ a[h][v]=d;h++;d++;}

for(j=1;j<=n+1-2*b;j++)          // 一圈的下行从右至左递增    

{ a[h][v]=d;v--;d++;

if(d>m*n) break; // min(m,n)为奇数且n>m时停止循环  

}

for(j=1;j<=m+1-2*b;j++)          // 一圈的左行从下至上递增    

{ a[h][v]=d;h--;d++;

if(d>m*n) break; // min(m,n)为偶数或者n<m时停止循环

}

t(b+1,s-2,d);                   // 调用内一圈递归函数  

}

posted on 2017-11-22 23:06  小星_log  阅读(272)  评论(0编辑  收藏  举报