TSOJ1296 分形宇宙

题目描述

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


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的分型宇宙,它的大小为3n-1 * 3n-1


设(x,y)位置为某个n度分型宇宙左上角开始的位置,则对n+1度的分型宇宙,有:

n-1度分形起始坐标 位置
(x, y) 左上角
(x, y+2*size) 右上角
(x+size, y+size) 中间
(x+2*size, y) 左下角
(x+2size, y+2size) 右下角

其中size = 3n-2

  • Answer
#include
using namespace std;
char maze[3000][3000];
void dfs(int n, int x, int y){
	if(n == 1){
		maze[x][y] = 'X';
	}
	else{
		int size = pow(3.0, n-2);
		dfs(n-1, x, y);//左上角
		dfs(n-1, x, y+2*size);//右上角
		dfs(n-1, x+size, y+size);//中间 
		dfs(n-1, x+2*size, y);//左下角
		dfs(n-1, x+2*size, y+2*size);//右下角
	}
	return;
}
int main(void){
	int n;
	while(~scanf("%d", &n)){
		int size = pow(3.0, n - 1);
		for(int i = 0; i <= size; i++){
			for(int j = 0; j <= size; j++){
				maze[i][j] = ' ';
			}
		}
		
		dfs(n, 1, 1);
		
		for(int i = 1; i <= size; i++){
			for(int j = 1; j <= size; j++){
				printf("%c", maze[i][j]);
			}
			printf("\n");
		}
		printf("-\n");
	}
	return 0;
} 

你可能感兴趣的:(TSOJ1296 分形宇宙)