**
三角形布图
**
#include<iostream>
#include<vector>
#include<string>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<algorithm>
#define N 100003
#define mod 10000000007
using namespace std;
int n,a[N];
char map[100][100]={0};
void change(int n,int row,int col)
{
int w=pow(2,n)-1;
int h=pow(2,n-1);
if(n==1) map[row][col]='*';//1--2之间的关系可推得
else{
change(n-1,row,col+(w+1)/4);//我们先通过二维数组将漆黑一片的空间抽象成一幅图,接着把图坐标化,每个数组变成这样(【】,【】)
change(n-1,row+h/2,col);//图集的描述如何最为精简?元素的组成:这幅图的大小,这幅图的首位置(头位置坐标),是不是确定了这两个元素
// 就可以把图案的轮廓描述出来了;然后每张图案,只要我们确定了他们的大小和头部位置,以及他们相互间的关系,推到1——2.数组不就赋值完成,也即点点坐标的元素就确定清了,由此可以画出图案。
change(n-1,row+h/2,col+(w+1)/2);
}
}
int main()
{
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
int i,j;
while(cin>>n){
for(i=0;i<100;i++)
for(j=0;j<100;j++)
map[i][j]=' ';
change(n,0,0);
for(i=0;i<=pow(2,n);i++){
for(j=0;j<=pow(2,n);j++)
cout<<map[i][j]<<' ';
cout<<endl;
}
}
return 0;
}