递归解决分型宇宙问题

P1296 分形宇宙

题目描述

魔法世界的科学家分形宇宙论,即宇宙是一个基本微粒,构成宇宙的无数个微粒又会有其他的小宇宙。分形定义如下:

1 度的分形为:

X

2 度的分形为:

X X
 X
X X

如果 B (n-1) 表示 n-1 度的分形,则 n 度的分形递归定义如下:

B(n-1) B(n-1)
   B(n-1)
B(n-1) B(n-1)

要求给定分形的度,输出相应的分形图。

输入描述

多组输入,每组输入一个正整数 n

输出描述

对应于每组数,输出相应的分形图,并用一个 “-” 分隔

样例输入
1
2
样例输出
X
-
X X
 X
X X
-

问题分析:

输入为:n,输出为:宇宙形状

由问题是递归定义的可知,很容易得到本题解法:递归;

每一个宇宙由对应五个上一级宇宙构成,所以问题的解空间为一个五叉数

在一个二维数组中用i,j保存五个上一级宇宙对应的起始位置。

函数出口为:n=1

递归调用函数即可。

代码展示:
#include<iostream>
#include<cmath>
using namespace std;
char a[1000][1000];

void printa(int n)
{  
    int len=pow(3,n-1);
    for(int i=0;i<len;++i)
    {
    for(int j=0;j<len;++j)
       cout<<a[i][j]; 
       cout<<endl;
    }
}

void init_a(int n)
{
    int len=pow(3,n-1);
    for(int i=0;i<len;++i)
    for(int j=0;j<len;++j)
    a[i][j]=' ';
}

void B(int n,int i,int j)
{
    if(n==1)
    {
    a[i][j]='X';
    return;
    }
    int size=pow(3,n-2);
    
    B(n-1,i,j);
    B(n-1,i+size,j+size);
    B(n-1,i,j+2*size);
    B(n-1,i+2*size,j);
    B(n-1,i+2*size,j+2*size);
}
int main()
{
    int n=0;
    while(cin>>n)
    {
    init_a(n);
    B(n,0,0);
    printa(n);
    cout<<"-"<<endl;
    }
    return 0;
 } 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值