【分形】【洛谷P1498】
https://www.luogu.org/problemnew/show/P1498
题目描述
自从到了南蛮之地,孔明不仅把孟获收拾的服服帖帖,而且还发现了不少少数民族的智慧,他发现少数民族的图腾往往有着一种分形的效果,在得到了酋长的传授后,孔明掌握了不少绘图技术,但唯独不会画他们的图腾,于是他找上了你的爷爷的爷爷的爷爷的爷爷……帮忙,作为一个好孙子的孙子的孙子的孙子……你能做到吗?
输入输出格式
输入格式:每个数据一个数字,表示图腾的大小(此大小非彼大小) n<=10
输出格式:这个大小的图腾
输入输出样例
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 /* 7 /\ 8 /__\ 9 /\ /\ 10 /__\/__\ 11 */ 12 int n; 13 char ch[2501][2501]; 14 int mypow(int x,int y) 15 { 16 int ans=1; 17 while(y) 18 { 19 if(y&1)ans*=x; 20 x*=x; 21 y/=2; 22 } 23 return ans; 24 } 25 void dfs(int q,int w,int e,int t)//q控制图形递归的边界 w e 控制横纵坐标 t控制深度【用于控制w e的大小,递归分形的精髓,一定要由n分解成n-1,然后观察w e的大小变化】 26 { 27 // cout << w << " "<<e << endl; 28 if(q==1) 29 { 30 ch[w][e]='/'; 31 ch[w][e+1]='\\'; 32 ch[w+1][e-1]='/'; 33 ch[w+1][e+2]='\\'; 34 ch[w+1][e]='_'; 35 ch[w+1][e+1]='_'; 36 return; 37 } 38 dfs(q/2,w,e,t*2); 39 dfs(q/2,w+t,e-t,t*2); 40 dfs(q/2,w+t,e+t,t*2); 41 } 42 int main() 43 { 44 scanf("%d",&n); 45 for(int i = 0 ; i < 2501 ; i++) 46 { 47 int j; 48 for( j = 0 ; j < 2501 ; j++) 49 { 50 ch[i][j]=' '; 51 } 52 } 53 dfs(mypow(2,n-1),0,mypow(2,n)-1,2); 54 for(int i = 0 ; i < mypow(2,n) ; i++) 55 { 56 for(int j = 2500 ; j >= 0 ; j--) 57 { 58 if(ch[i][j]=='\\') 59 { 60 ch[i][j+1]='\0'; 61 break; 62 } 63 } 64 } 65 for(int i = 0 ; i < mypow(2,n) ; i++) 66 { 67 printf("%s\n",ch[i]); 68 } 69 return 0; 70 }