【树】[11.1]

mac2026-01-31  3

UVA297 四分树 Quadtrees

#include<stdio.h> #include<string.h> char s[2000]; int len=32; int vis[32][32],ans; //数组用于标记是否染黑 void solve(char*s,int &p,int x,int y,int w){//当前正方形的左上角坐标为(x,y) char ch=s[p++];//先赋值,再移动 if(ch=='p'){ solve(s,p,x+w/2,y, w/2);//右上角正方形 solve(s,p,x, y, w/2);//左上角正方形 solve(s,p,x, y+w/2, w/2);//左下角正方形 solve(s,p,x+w/2,y+w/2, w/2);//右下角正方形 } else if(ch=='f'){ for(int i=x+1;i<=x+w;i++){ //由于上一层的处理,此处w即当前正方形的边界 //注意i,j初始值是点的坐标,将其+1视作染正方形左上角第1~x+w个像素 for(int j=y+1;j<=y+w;j++){ if(vis[i][j]==0){ vis[i][j]=1; ans++; } } } } } int main(){ int t; scanf("%d",&t); while(t--){ memset(vis,0,sizeof(vis)); ans=0; //每一组数据操作之前都要初始化 for(int i=1;i<=2;i++){ scanf("%s",s); int p=0;//用于记录将要读取的字符串的下标 solve(s,p,0,0,len); } printf("There are %d black pixels.\n",ans); } return 0; }
最新回复(0)