建一个32*32大小的二维数组,然后递归先序遍历填数
#include <iostream>
#include <cstdio>
#include <cstring>
#include <sstream>
using namespace std;
const int len = 32;
const int maxn = 2048;
char s[maxn];
int buf[len][len],cnt;
void draw(const char *s, int &p,int r ,int c, int w){
char ch = s[p++];
if(ch == 'p'){
draw(s, p, r, c+(w>>1), (w>>1)); //1
draw(s, p, r, c , (w>>1));
draw(s, p, r+(w>>1), c , (w>>1));
draw(s, p, r+(w>>1), c+(w>>1), (w>>1));
}
else if(ch=='f'){
for(int i = r ; i < r+w ; i++)
for(int j = c; j< c+w ; j++)
if(buf[i][j] == 0) { buf[i][j] = 1; cnt++;}
}
}
int main(){
int T;
cin>>T;
getchar();
while(T--){
memset(buf, 0 , sizeof(buf));
cnt = 0;
for( int i = 0; i < 2 ; i++){
gets(s);
int p = 0;
draw(s , p, 0 ,0 ,len);
}
cout<<"There are "<< cnt <<" black pixels."<<endl;
}
return 0;
}