zoukankan      html  css  js  c++  java
  • 旋转数阵

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

    #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);

    else

       printf("   %d阶逆转方阵:  ",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(" ");

       }

    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顺转矩阵:  ",m,n);

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

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

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

         printf(" ");

        }

      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);                   // 调用内一圈递归函数  

    }

  • 相关阅读:
    U盘PE系统下安装WIN2003和WINXP的方法(非GHOST版)
    自己做U盘急救杀毒
    Windows Server 2003 SP2 企业版 ISO 下载 629M
    解决开机关机慢问题
    一般处理程序
    [转]iframe自适应高度详解(希望对大家有用)非常经典,非同凡响
    ie6下position fixed的失效bug
    php文件上传MAX_FILE_SIZE不起作用的问题
    IE6测试网页显示空白页面
    自己写的面向过程php验证码
  • 原文地址:https://www.cnblogs.com/liao-pxsoftware15/p/7881841.html
Copyright © 2011-2022 走看看