分形之美
2016-05-23 12:34
323 查看
焉识何物
前几天手贱点开了一道题 POJ 2083想着简单的递归就可以吧。只是一开始的方法非常蠢!把一个子图用string存下来,然后构造下一个等级的图。将3*3的子图拼成一个大图,我是一行一行扫进来的……于是如下:#include <cstdio> #include <iostream> #include <cstring> #include <queue> #include <algorithm> #include <cmath> using namespace std; #define N 7 char str [800*800] = {"X\0"}; char ans [800][800]; int a = {1}, f = {1}; string tmp, blank; string gao(string as, string bs, string cs, int d){ string r = ""; for(int i = 0;i < d;i++){ for(int j = 0;j < d;j++) r += as[i*d+j]; for(int j = 0;j < d;j++) r += bs[i*d+j]; for(int j = 0;j < d;j++) r += cs[i*d+j]; } return r; } int main() { for(int i = 1;i < N;i++) a[i] = a[i-1] * 3; for(int i = 0;i < N;i++) f[i] = a[i] * a[i]; for(int i = 1;i < N;i++){ blank = tmp = ""; for(int j = 0;j < f[i-1];j++){ tmp += str[i-1][j]; blank += ' '; } tmp = gao(tmp, blank, tmp, a[i-1]) + gao(blank, tmp, blank, a[i-1]) + gao(tmp, blank, tmp, a[i-1]); for(int j = 0;j < f[i];j++) str[i][j] = tmp[j]; } int n; while(~scanf("%d", &n)){ if(n == -1) break; n--; for(int i = 0;i < f ;i++){ if(i && i % a == 0) printf("\n"); putchar(str [i]); } printf("\n-\n"); } return 0; }
分形乍现
感觉挺丑陋的,然后看了discuss,意外发现了另一道题 POJ 3678,这下子不能丑陋地按行扫描了!说到分形,记起来了几个漂亮的图。把一个最简单的子图成为雏形,那么大图整体形状就是一个雏形的放大版。填充子图进去的时候,只要标明放置的位置和放大的比例,即可填成一大图。有点递归的意思,于是就这么短……/*-------------------------------------------- * File Name: POJ 3678 * Author: Danliwoo * Mail: Danliwoo@outlook.com * Created Time: 2016-05-23 12:25:53 --------------------------------------------*/ #include <cstdio> #include <iostream> #include <cstring> #include <queue> #include <algorithm> #include <cmath> using namespace std; #define N 7 char mp [3010][3010]; int a = {1}, f = {1}; void pt(int x, int y, int d){ for(int i = 0;i < a[d];i++) for(int j = 0;j < a[d];j++) mp[d+1][x+i][y+j] = mp[d][i][j]; } void dfs(int n){ if(n == 0) return; dfs(n-1); for(int i = 0;i < a[0];i++) for(int j = 0;j < a[0];j++) if(mp[0][i][j] != ' ') pt(i*a[n-1], j*a[n-1], n-1); } void pr(int n){ for(int i = 0;i < a ;i++){ for(int j = 0;j < a ;j++) putchar(mp [i][j]); printf("\n"); } } int main(){ int n, m; while(scanf("%d", &n), n){ getchar(); for(int i = 0;i < n;i++) gets(mp[0][i]); a[0] = strlen(mp[0][0]); f[0] = a[0] * a[0]; scanf("%d", &m); for(int i = 1;i < m;i++){ a[i] = a[i-1] * a[0]; f[i] = a[i] * a[i]; } for(int k = 1;k < m;k++) for(int i = 0;i < a[k];i++){ for(int j = 0;j < a[k];j++) mp[k][i][j] = ' '; } dfs(m-1); pr(m-1); } return 0; }
欺人禄蠹
蠢蠢地想起来曾经遇到过的一道需要递归搞的题 ZOJ 3839,以为这是分形,哦,no!一定是我瞎了,按照分形的想法搞出来的大图,是几个矩形块,而不是加长的线。这就需要手动画线了!代码略,自己玩吧:)相关文章推荐
- 享元模式
- 第十三周阅读程序-交通工具类(3)
- HDU 2016 数据的交换输出
- 【初中部 NOIP提高组 】模拟赛A
- Java对象的4中引用类型
- 遍历DataTable内存数据的三种方法性能对比
- Java - 蓝桥杯 - 历届试题 核桃的数量
- 制作自己的HUD
- 网络请求服务器之HTTP状态码
- DataTable在内存中的使用
- leetcode 之Implement strStr()(27)
- GNU C的__attribute__机制
- [从头学数学] 第217节 带着计算机去高考(九)
- Android动画
- Android设计模式之建造者模式——AlertDialog
- 三极管的工作原理(详细、通俗易懂、图文并茂)
- springmvc+jsonp 跨域访问
- WebSphere MQ Jms 连接
- Unity 对象池简单使用
- 统计-均值,期望,方差,协方差,协方差矩阵