原题链接:POJ—2083
题目大意:题目大意是比较明显的,输入一个数n,按题目示意输出相应的图形。
题目解法:分形,用DFS以及递归。输出图形的方式是最后一块输出,建立maps数组,然后更改maps数组,最后输出maps数组就可以了。首先计算一共有多少行列,初始化maps。然后我们可以把B(n)的图形分为五部分,分别是左上、右上、中心、左下、右下五部分,可以知道这五部分的图形都是B(n-1),所以递归就来了,我们在画B(n)图形的时候可以通过在这五部分画B(n-1)的图像来实现,同样在画B(n-1)的时候可以通过画B(n-2)的图形来实现,最后直到画B(1)的图像,然后return,最后maps即更新为结果。
题目代码:
#include<stdio.h>
char maps[1010][1010];
int x3(int n)
{
int ans=1;
for(int i=1;i<=n;i++)
{
ans=ans*3;
}
return ans;
}
void dfs(int n,int x,int y)
{
if(n==1)
{
maps[x][y]='X';
return;
}
int d=x3(n-2);
dfs(n-1,x,y);
dfs(n-1,x,y+2*d);
dfs(n-1,x+d,y+d);
dfs(n-1,x+2*d,y);
dfs(n-1,x+2*d,y+2*d);
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
int sizes=x3(n-1);
for(int i=0;i<sizes;i++)
for(int j=0;j<sizes;j++)
maps[i][j]=' ';
dfs(n,0,0);
for(int i=0;i<sizes;i++)
{
for(int j=0;j<sizes;j++)
printf("%c",maps[i][j]);
printf("\n");
}
printf("-\n");
}
return 0;
}
欢迎留言哦!