代码偷懒了下,没有简化
#include<iostream>
#include<math.h>
using namespace std;
const int maxsize=512;
int MAP[maxsize][maxsize];
int n;
void DFS(int r,int c,int s)
{
char ch;
int num,i,j;
cin>>ch;
if(ch!='Q')
{
if(ch=='W')
num=0;
else
num=1;
for(i=0;i<s;i++)//左上
for(j=0;j<s;j++)
MAP[r+i][c+j]=num;
}
else
DFS(r,c,s/2);
if(s==n)
return;
cin>>ch;
if(ch!='Q')
{
if(ch=='W')
num=0;
else
num=1;
for(i=0;i<s;i++)//右上
for(j=0;j<s;j++)
MAP[r+i][c+s+j]=num;
}
else
DFS(r,c+s,s/2);
cin>>ch;
if(ch!='Q')
{
if(ch=='W')
num=0;
else
num=1;
for(i=0;i<s;i++)//左下
for(j=0;j<s;j++)
MAP[r+s+i][c+j]=num;
}
else
DFS(r+s,c,s/2);
cin>>ch;
if(ch!='Q')
{
if(ch=='W')
num=0;
else
num=1;
for(i=0;i<s;i++)//右下
for(j=0;j<s;j++)
MAP[r+s+i][c+s+j]=num;
}
else
DFS(r+s,c+s,s/2);
}
int main()
{
cin>>n;
DFS(0,0,n);//形成图
cout<<"#define quadtree_width "<<n<<endl
<<"#define quadtree_height "<<n<<endl
<<"static char quadtree_bits[] = {"<<endl;
int num=0;
for(int i=0;i<n;i++)
{
int k=0;
while(k<n/8)
{
for(int j=0;j<8;j++)
{
if(MAP[i][j+8*k])
num+=pow(2.0,j);
}
cout.setf(ios_base::hex,ios_base::basefield);//十六进制显示
if(num<16)
cout<<"0x"<<'0'<<num<<',';
else
cout<<"0x"<<num<<',';
num=0;
k++;
}
cout<<endl;
}
cout<<"};"<<endl;
return 0;
}