POJ2083 Fractal【分形回溯】

本文介绍了一种递归生成盒分形的算法,通过定义递归函数printBox(n,x,y),在指定坐标绘制n度盒分形。文章详细解释了递归过程,包括递归边界条件和递归调用的坐标计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

n度的盒分形的规模为3(n-1),即n度的盒分形图为一个长宽为3(n-1)的正方形。
设置递归函数printBox(n,x,y)生成以坐标(x,y)为左上角的n度盒分形。
1)递归边界: 若n=1,则在(x,y)输出‘X’
2)若n>1,则计算n-1度的盒子的规模 m = 3^(n-2),分别在左上方, 右上方,中间,左下方和右下方画出5个n-1度的盒子。
对于左上方的n-1度的盒子,左上角的坐标为(x,y),递归printBox(n-1,x,y)生成;
对于右上方的n-1度的盒子,左上角的坐标为(x+2m,y),递归printBox(n-1,x+2m,y)生成;
对于中间的n-1度的盒子,左上角的坐标为(x+m,y+m),递归printBox(n-1,x+m,y+m)生成;
对于左下方的n-1度的盒子,左上角的坐标为(x,y+2m),递归printBox(n-1,x,y+2m)生成;
对于右上方n-1度的盒子,左上角的坐标为(x+2m,y+2m),递归printBox(n-1,x+2m,y+2m)生成

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<math.h>
using namespace std;

char a[735][735];

void dfs(int cur,int x,int y)
{
    if(cur==1)
    {
        a[x][y]='X';
        return ;
    }
    int s=pow(3,cur-2);
    dfs(cur-1,x,y);
    dfs(cur-1,x,y+2*s);
    dfs(cur-1,x+s,y+s);
    dfs(cur-1,x+2*s,y);
    dfs(cur-1,x+2*s,y+2*s);
}

int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        if(n==-1)
            break;
        memset(a,' ',sizeof(a));
        dfs(n,1,1);
        int s=pow(3,n-1);
        for(int i=1;i<=s;i++)
        {
            a[i][s+1]='\0';
        }
        for(int i=1;i<=s;i++)
        {
            printf("%s\n",a[i]+1);
        }
        printf("-\n");
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值