分形算法 (dfs)
题目描述
圈圈圆圆圈圈,lulu小朋友最近看喜羊羊看多了,老是受刺激就画圆圈,听到小于8的数字时,还会画出十分有规律的圆圈,现在你需要根据样例观察出规律,编写程序,根据输入的数字n(n<8),输出对应的圆圈。
输入描述:
第一行是样例数T(T<9)
第2到2+T-1行每行有一个整数n(n<8),代表lulu听到的数字
输出描述:
听到对应数字时,输出对应样子的圆圈。
示例1
输入
4
0
1
2
3
输出
O
O
O O
O
O
O O
O
O O
O O O O
O O
O
O O
O
O
O O
O
O O
O O O O
O O
O
O O
O
O O
O O O O
O O
O O O O
O O O O O O O O
O O O O
O O
O O O O
O O
O
O O
O
O O
O O O O
O O
O
O O
O
说明
当n=0时输出
O
当n=1时输出
*O
O*O
*O
当n=2时输出
****O
***O*O
****O
*O*****O
O*O***O*O
*O*****O
****O
***O*O
****O
上面的'O'是大写英文字母O,'*'代表空格,每一行最后一个O后面不带空格。
备注:
对于100%的数据,
0<T<9;
0<=n<8;
1 #include<iostream>
2 #include<cstdio>
3 #include<cstring>
4 #include<cmath>
5 #include<algorithm>
6 #include<map>
7 #include<set>
8 #include<vector>
9 #include<stack>
10 #include<queue>
11 using namespace std;
12 #define ll long long
13 const int inf=99999999;
14 const int mod=1e9+7;
15 const int maxn=2500;
16 char e[maxn][maxn];
17 int len;
18 void dfs(int n,int x,int y)
19 {
20 if(n==1)
21 e[x][y]='O';
22 else
23 {
24 int d=pow(3,n-2);
25 dfs(n-1,x+d,y);
26 //左方的分形
27 dfs(n-1,x,y+d);
28 //上方的分形
29 dfs(n-1,x+d,y+2*d);
30 //右方的分形
31 dfs(n-1,x+2*d,y+d);
32 //下方的分形
33 }
34 }
35 int main()
36 {
37 int T;
38 cin>>T;
39 int n;
40 while(T--)
41 {
42 cin>>n;
43 len=pow(3,n);//图的大小
44 for(int i=0;i<len;i++)//初始化
45 for(int j=0;j<len;j++)
46 e[i][j]=' ';
47 dfs(n+1,0,0);//搜索
48 for(int i=0;i<len;i++)//打印图形
49 {
50 for(int j=0;j<len;j++)
51 cout<<e[i][j];
52 cout<<endl;
53 }
54 }
55 return 0;
56 }
大佬见笑,,