zoukankan      html  css  js  c++  java
  • 棋盘覆盖问题

    问题描述:

     问题分析:

      将大棋盘分成四个小棋盘,做四次判断是否黑块在4个各自的小棋盘内,如果在,直接用原来的黑块位置递归求解,若不在,将靠近大棋盘中间的那块当做黑块,继续递归,注意每次递归开始都是从左上角的坐标开始,遇到棋盘边长为1,递归返回

    代码示例:

     1 //棋盘覆盖问题
     2 #include<stdio.h>
     3 #include<string.h>
     4 #define max 1024
     5 int n,i,def[max][max];
     6 int aa,bb;
     7 void fenzhi(int a,int b,int aa,int bb,int len) //aa,bb为黑块坐标,a,b为棋盘的左上角,这里从1,1开始
     8 {
     9     if(len==1) return;
    10     i++;
    11     int temp=i;   //i是个全局变量,递归回来会发生变化
    12     int l=len/2;  //必须把用l替换len/2去参加下层递归,第一个if else语句中的递归回来,len就发生了变化
    13     if(aa<a+l&&bb<b+l) fenzhi(a,b,aa,bb,l);
    14     else
    15     {
    16         def[a+l-1][b+l-1]=temp;
    17         fenzhi(a,b,a+l-1,b+l-1,l);
    18     }
    19     
    20     if(aa>=a+l&&bb<b+l) fenzhi(a+l,b,aa,bb,l);
    21     else
    22     {
    23         def[a+l][b+l-1]=temp;
    24         fenzhi(a+l,b,a+l,b+l-1,l);
    25     }
    26     
    27     if(aa<a+l&&bb>=b+l) fenzhi(a,b+l,aa,bb,l);
    28     else
    29     {
    30         def[a+l-1][b+l]=temp;
    31         fenzhi(a,b+l,a+l-1,b+l,l);
    32     }
    33     
    34     if(aa>=a+l&&bb>=b+l) fenzhi(a+l,b+l,aa,bb,l);
    35     else
    36     {
    37         def[a+l][b+l]=temp;
    38         fenzhi(a+l,b+l,a+l,b+l,l);
    39     }
    40 }
    41 
    42 int main()
    43 {
    44     printf("请输入棋盘边长和黑点坐标,下标均为1开始:
    ");
    45     while(scanf("%d%d%d",&n,&aa,&bb))
    46     {
    47         i=0;  //此语句必不可少,清除上次作业残留
    48         memset(def,0,sizeof(def));//同上
    49         fenzhi(1,1,aa,bb,n);
    50         for(int i=1;i<=n;i++)
    51         {
    52             for(int j=1;j<=n;j++) printf("%3d",def[i][j]);
    53             printf("
    
    ");
    54         }
    55         printf("请输入棋盘边长和黑点坐标,下标均为1开始:
    ");
    56     }
    57     return 0;
    58 }
    59 //代码参考https://blog.csdn.net/qq705167895/article/details/84106219

    运行结果:

  • 相关阅读:
    【Android 7.1.1】 锁屏界面点击“空白处”响应事件
    ubuntu14.04 LTS Visual Studio Code 编辑器推荐
    使用MAT分析Java内存
    Android 性能优化:使用 Lint 优化代码、去除多余资源
    Android 内存使用hprof文件打开方法
    使用Android Studio调试内存问题
    使用新版Android Studio检测内存泄露和性能
    Android性能优化篇 [ 谷歌官方 ]
    Android 内存泄露总结(附内存检测工具)
    Android MemInfo 各项的意义(转)
  • 原文地址:https://www.cnblogs.com/bboykaku/p/12779197.html
Copyright © 2011-2022 走看看