1. 程式人生 > >四分樹(以後遇到四分樹要用陣列來存)

四分樹(以後遇到四分樹要用陣列來存)

四分樹是將一張圖分成四份,圖代表一個節點,分成四份的一張圖代表四個子節點,用二維陣列代表一張圖,然後進行操作,這道題是求兩張圖的重合成一張來算結果,所以就是將兩張圖的操作放到一個二維陣列中。

#include <set> 
#include <queue> 
#include<algorithm>
#include <iostream>
#include<string.h>
#include<map>
#include<stack>
#include<string>
#include <stdio.h>
#include<sstream>
using namespace std;
#define max 1034
int len=32;
int canvas[max][max] ;
int cnt;
void draw(int a,int b,int c,int d){
    char x;
    cin>>x;
    if(x=='p'){
        draw(a,(a+b)/2,c,(c+d)/2);
        draw(a,(a+b)/2,(c+d)/2,d);
        draw((a+b)/2,b,c,(c+d)/2);
        draw((a+b)/2,b,(c+d)/2,d);
    }
    else if(x=='f'){
        for(int i=a;i<b;i++)
            for(int j=c;j<d;j++){
                if(canvas[i][j]==0){
                    canvas[i][j]=1;
                    cnt++;
                }
            }
    }
}
int main()
{  
    int num;
    cin>>num;
    while(num--){
        cnt=0;
        memset(canvas,0,sizeof(canvas));
        draw(0,len,0,len);
       // cout<<"outdraw"<<endl;
        draw(0,len,0,len);
        cout<<"There are "<<cnt<<" black pixels."<<endl;
    }
    return 0;
}