【树】[11.1]

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;
} 
发布了28 篇原创文章 · 获赞 0 · 访问量 678

猜你喜欢

转载自blog.csdn.net/weixin_45561591/article/details/102866205