• ACM/ICPC 之 分治法入门(画图模拟:POJ 2083)


      题意:大致就是要求画出这个有规律的Fractal图形了= =

      例如 1 对应 X

         2 对应 X  X

              X

              X  X

    • 这个题是个理解分治法很典型的例子(详情请参见Code)
    • 分治法:不断缩小规模,以致把整个大问题分解为若干个可以直接处理的小问题,一般通过递归调用实现,可以用极简代码完成高复杂的工作,但空间与时间占用也相对较大。

      

     1 //分治法画图
     2 //Memory:880K  Time:16 Ms
     3 #include<iostream>
     4 #include<cstring>
     5 #include<cstdio>
     6 using namespace std;
     7 
     8 #define MAX 1000
     9 
    10 //╮(╯▽╰)╭,毕竟图形处理是硬伤,只能用数组模拟画布了= =
    11 char fig[MAX][MAX];        //figure
    12 int scale;
    13 
    14 void dfs(int n,int size,int x,int y)
    15 {
    16     if(n==1)
    17         fig[x][y] = 'X';
    18     else
    19     {
    20         //规模缩小一倍
    21         size /= 3;
    22 
    23         /*分治画五个分区域*/
    24         dfs(n-1,size,x,y);
    25         dfs(n-1,size,x+size*2,y);
    26         dfs(n-1,size,x,y+size*2);
    27         dfs(n-1,size,x+size,y+size);
    28         dfs(n-1,size,x+size*2,y+size*2);
    29     }
    30 }
    31 
    32 int main()
    33 {
    34     int n,i,j;
    35     while(~scanf("%d",&n), n != -1)
    36     {
    37         //计算当前规模所产生的尺寸
    38         scale = 1;
    39         for(i=2;i<=n;i++)
    40             scale *= 3;
    41         //初始化画布
    42         for(i=1;i<=scale;i++)
    43         {
    44             for(j=1;j <= scale;j++)
    45                 fig[i][j] = ' ';
    46             fig[i][j] = '';
    47         }
    48 
    49         dfs(n,scale,1,1);
    50         for(i=1;i<=scale;i++)
    51             printf("%s
    ",&fig[i][1]);
    52         printf("-
    ");
    53     }
    54 
    55     return 0;
    56 }
    他坐在湖边,望向天空,她坐在对岸,盯着湖面
  • 相关阅读:
    axublogcms1.1.0 Getshell
    易酷 cms2.5 本地文件包含漏洞 getshell
    通过 phpmyadmin getshell
    python 简单图像识别--验证码
    Linux 入侵检测小结
    beef + msf 实现内网渗透
    phpwind v9存在命令执行漏洞(登陆后台)
    缓冲区溢出实践
    《Metasploit魔鬼训练营》第四章(下)
    《Metasploit魔鬼训练营》第四章(上)
  • 原文地址:https://www.cnblogs.com/Inkblots/p/4729546.html
Copyright © 2020-2023  润新知