实验任务
小菇凉和小光头从老鼠那儿离开后接着往前走,在森林的角落石壁上发现了一个奇怪的“X”标记。在标记的边上有这么一段话:传说中的 X 蕴含古老的力量,真正了解“X”意义的人才能得到这种力量,而了解“X”的方式就是画“X”,不断的画“X”,规则如下:
1:
X
2:
X X
X
X X
.
.
.
以此类推(你们一定看懂了!嗯!>_<。。。
小菇凉和小光头希望解开“X”的秘密得到这股神秘的力量去打败大魔王,你能帮帮他们么?
数据输入
输入有多组数据,每组一个数字 n,代表输出含有 n 个层次的 X 图形(n<=7,当 n=-1结束)
数据输出
输出对应图形,每组输出后输出一个“-”
输入示例
1
2
3
4
-1
输出示例
解题思路
同样是DFS的应用。
一开始根本没有往DFS这方面想,只是觉得是普通的递归画图,可是画出来非常的奇怪!后来只好去参考别人的代码,才恍然大悟 。。。 (:з」∠)
参考代码
#include<stdio.h>
#include<math.h>
const int maxn = 750; //3^6 = 729
char map[maxn][maxn];
void dfs(int n,int x,int y) ;
int main()
{
int i,j,n,size;
while(~scanf("%d",&n) && n != EOF){
size=pow(3.0,n-1); //当前图形的尺寸,不难发现是3^(n-1)
for(i = 1;i <= size;i++)
for(j = 1;j <= size;j++)
map[i][j]=' '; //初始化每个位置都为' '空格
dfs(n,1,1);
for(i = 1;i <= size;i++) {//输出图形
for(j = 1;j <= size;j++)
printf("%c",map[i][j]);
printf("\n");
}
printf("-\n");
}
return 0;
}
void dfs(int n,int x,int y)
{
int size;
if(n==1){
map[x][y]='X';
return ;
}
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); //右下
}