POJ 2083 Fractal 分形题目
这两天自学了一线算法导论里分治策略的内容,秉着只有真正投入投入编程,才能更好的理解一种算法的思想的想法,兴致勃勃地找一些入门的题来学习。
搜了一下最后把目光锁定在了Poj fractal这一个题上。以前一直对这种题无从下手,通过对这一条题的分析与理解,算是第一次对分治思想有一个较为具象的了解。
分治思想的依托为递归。
下面我尝试用分支策略的思想描述这一题。
分解:
在这条题里,通过分析题目可以知道:每一个更大一点的图形都是由前一个状态的小图形放置在对应位置组成的;而每一个小图形的又由更前一个状态的图形组成。
因此,我们可以把一开始输入的规模m视为【大问题】,大问题的内容是:如何按照‘X'的形态填充对应位置的字符。
接着,把大问题划分为5个规模为m-1视为【大问题的划分问题1】,问题1 的内容是:如何按照‘X'的形态填充对应位置的字符。
再接着,把问题1的内容划分为更小的5个规模为m-2的【问题1的划分问题2】,问题2 的内容是:如何按照‘X'的形态填充对应位置的字符。
……
终态:当问题被划分为为规模为1 的子问题时,已经不那么再继续划分了。这时候可以直接在当前位置上填一个“X"。
将每一个层次的问题视为一个状态, 相邻状态的关系为【当前问题规模数=前一个问题规模数-1】
解决:
通过观察每一个规模的图形不难发现其中的规律
XXXOOOXXX
XXXOOOXXX
XXXOOOXXX
OOOXXXOOO
OOOXXXOOO
OOOXXXOOO
XXXOOOXXX
XXXOOOXXX
XXXOOOXXX
每一个图形的规模面积为m*m,长与宽正好是规模数m,在左上、右上、中部、左下、右下分别为前一个规模的图形,其他部分为空
而每一个规模为m的图形,某一个部分离相邻一个部分的距离为3^(m-2)【比如左上部分第一个格子的位置距离右上部分第一个格子的距离:纵坐标相同,横坐标为+3^(m-2)】
合并:
以递归的方式合并不断分解问题,局部解决以后又返回上一个状态。
注:因为其他部分为空,所以图形以外的数组部分要填'\0'
具体实现
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
char a[][];
void dfs(int cur,int x,int y)
{
if(cur==)
{
a[x][y]='X';
return ;
}
int s=(int)pow(3.0,cur-);
//分别打印左上、右上、中间、左下、右下x应该变为的图形
dfs(cur-,x,y);
dfs(cur-,x,y+*s);
dfs(cur-,x+s,y+s);
dfs(cur-,x+*s,y);
dfs(cur-,x+*s,y+*s);
}
int main()
{
int n;
while(~scanf("%d",&n))
{
if(n==-) break;
memset(a,' ',sizeof(a));
dfs(n,,);
int s=(int)pow(3.0,n-);
for(int i=;i<=s;i++)
{
a[i][s+]='\0';//3的n-1次方后面没有多余空格 }
for(int i=;i<=s;i++)
{
printf("%s\n",a[i]+);
}
printf("-\n");
}
return ;
}
详解代码
POJ 2083 Fractal 分形题目的更多相关文章
- POJ 2083 Fractal 分形
去年校赛团队赛就有一道分形让所有大一新生欲生欲死…… 当时就想学了 结果一直拖到…… 今天上午…… 马上要省选了 才会一点基础分形…… 还是自己不够努力啊…… 分形主要是要找到递归点…… 还有深度…… ...
- poj 2083 Fractal 递归 图形打印
题目链接: http://poj.org/problem?id=2083 题目描述: n = 1时,图形b[1]是X n = 2时,图形b[2]是X X X ...
- POJ 2083 Fractal
Fractal Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 6646 Accepted: 3297 Descripti ...
- ( 递归 )Fractal -- POJ -- 2083
http://poj.org/problem?id=2083 Fractal Time Limit: 1000MS Memory Limit: 30000K Total Submissions: ...
- POJ 3845 Fractal(计算几何の旋转缩放)
Description Fractals are really cool mathematical objects. They have a lot of interesting properties ...
- Repeater POJ - 3768 (分形)
Repeater POJ - 3768 Harmony is indispensible in our daily life and no one can live without it----may ...
- ACM/ICPC 之 分治法入门(画图模拟:POJ 2083)
题意:大致就是要求画出这个有规律的Fractal图形了= = 例如 1 对应 X 2 对应 X X X X X 这个题是个理解分治法很典型的例子(详情请参见Code) 分治法:不断缩小规 ...
- spfa+floyed+最长路+差分约束系统(F - XYZZY POJ - 1932)(题目起这么长感觉有点慌--)
题目链接:https://cn.vjudge.net/contest/276233#problem/F 题目大意:给你n个房子能到达的地方,然后每进入一个房子,会消耗一定的生命值(有可能是负),问你一 ...
- poj 2186 强连通入门题目
每头牛的梦想就是成为牛群中最受欢迎的牛. 在一群N(1 <= N <= 10,000)母牛中, 你可以得到M(1 <= M <= 50,000)有序的形式对(A,B),告诉你母 ...
随机推荐
- 个人理解的int数组和char数组
char数组中不论是一维还是二维的,在程序执行时每一块的分离依据都是以提供的起始地址到'\0'为一个处理的字符串.所以关于char[]的函数都是只提供相应起始地址作为形参就可以. char[]互相交换 ...
- java基础-day27
第04天 java基础加强 今日内容介绍 u Xml的综合案例 u 注解 u 类的加载 u 动态代理 第1章 注解 1.1 注解概述 l 什么是注解:Annotation注解,是一种代码级别的 ...
- NoSQL世界的几个重要理论
和所有事物一样,NoSQL的兴起也是由许多理论支撑作为前提的,正是由下面一些理论的支撑,NoSQL的方向才能如此明朗. 1.CAP理论 CAP理论无疑是导致技术趋势由关系数据库系统向NoSQL系统转变 ...
- html,css,jquery,JavaScript
1.全选 (当点击checkall按钮时,选中所有checkbox用prop全选上)function checkAll() { $(':checkbox').prop('checked', true) ...
- Android-Kotlin-具名参数
先看一个这样的案例,[案例一]: package cn.kotlin.kotlin_base05 fun showAction1(country: String, volk: String) { pr ...
- [ASE][Daily Scrum]11.06
我们的<坦克大战·无尽>正式开始动工了,今天的任务计划如下~ [Plan] View Shilin Liu 搭建好开发环境 收集素材 Control Jiafan Zhu ...
- MVC 视图不使用模板页的两种方法
直接对view页面的Layout值设置null @{ Layout = null;//"~/Views/Shared/_Layout.cshtml"; } 对_ViewStart. ...
- 背水一战 Windows 10 (52) - 控件(集合类): ItemsControl - 自定义 ItemsControl, 自定义 ContentPresenter
[源码下载] 背水一战 Windows 10 (52) - 控件(集合类): ItemsControl - 自定义 ItemsControl, 自定义 ContentPresenter 作者:weba ...
- Android 使用 NYTimes Stores 缓存 network request
NYTimes Stores 是一个缓存库,在 2017年的 AndroidMakers 大会上被介绍过. https://github.com/NYTimes/Store 实现一个 Disk Cac ...
- sublime text syntaxdef
http://sublimetext.info/docs/en/extensibility/syntaxdefs.html