博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ACM/ICPC 之 分治法入门(画图模拟:POJ 2083)
阅读量:5139 次
发布时间:2019-06-13

本文共 1398 字,大约阅读时间需要 4 分钟。

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

  例如 1 对应 X

     2 对应 X  X

          X

          X  X

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

  

1 //分治法画图 2 //Memory:880K  Time:16 Ms 3 #include
4 #include
5 #include
6 using namespace std; 7 8 #define MAX 1000 9 10 //╮(╯▽╰)╭,毕竟图形处理是硬伤,只能用数组模拟画布了= =11 char fig[MAX][MAX]; //figure12 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 else19 {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] = '\0';47 }48 49 dfs(n,scale,1,1);50 for(i=1;i<=scale;i++)51 printf("%s\n",&fig[i][1]);52 printf("-\n");53 }54 55 return 0;56 }

 

转载于:https://www.cnblogs.com/Inkblots/p/4729546.html

你可能感兴趣的文章
http 方法
查看>>
值类型和引用类型,栈和堆的含义
查看>>
parted分区
查看>>
抛出错误
查看>>
Can't play local SWF file in Media Player
查看>>
图片标签img
查看>>
JavaScript语言中文参考手册.chm
查看>>
表哥的Access入门++以Excel视角快速学习数据库知识pdf
查看>>
day29 jq
查看>>
TC 配置插件
查看>>
关于异步reset
查看>>
第十三周进度表
查看>>
UITextField银行卡加空格
查看>>
博客作业05--查找
查看>>
风继续吹
查看>>
Python/Java读取TXT文件
查看>>
索引优先队列的工作原理与简易实现
查看>>
SPOJ - DISUBSTR Distinct Substrings (后缀数组)
查看>>
并发编程简介
查看>>
Unity程序们经常用到的网址(方便自己用,一直更新)
查看>>