zoukankan      html  css  js  c++  java
  • 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 }
    他坐在湖边,望向天空,她坐在对岸,盯着湖面
  • 相关阅读:
    闭包函数与装饰器
    函数的嵌套,名称空间以及作用域
    函数知识点整理
    文件处理,光标
    ☆Django☆---表的设计 生命周期 分组 解析 路由层 视图层
    ☆Django☆---注册功能
    ☆Django☆---初步学习
    ☆Django☆---学习Django前的了解 wsgiref jinja2
    ☆javaSctipt☆---基础学习
    ☆前端☆---博客园作业
  • 原文地址:https://www.cnblogs.com/Inkblots/p/4729546.html
Copyright © 2011-2022 走看看