【图 ->四分树】图论模型 非二叉树,,<四叉树>
_____无聊的慌,随便改的一个四分树代码,< 0 1黑白方块> ,,这得有多无聊,,,
// 题意:给两棵四分树的先序遍历,求二者合并之后(黑色部分合并)黑色像素的个数。p表示中间结点,f表示黑色(full),e表示白色(empty)
// 算法:先建树,然后统计
#include
#include
#includeconst int len = 32;
const int maxn = 1024 + 10;
char s[maxn];
int buf[len][len], cnt;
// 把字符串s[p..]导出到以(r,c)为左上角,边长为w的缓冲区中
// 2 1
// 3 4
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/2, w/2);
// 1
draw(s, p, r,c, w/2);
// 2
draw(s, p, r+w/2, c, w/2);
// 3
draw(s, p, r+w/2, c+w/2, w/2);
// 4
} 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;
int m,n;
int p = 0;
scanf("%d", &T);
//while(T--) {
while(1){_sleep(5*1000);
system("cls");
memset(s, '\0', sizeof(s));
memset(buf, 0, sizeof(buf));
p = 0;
cnt = 0;
strcpy(s,"ppfefepfefeee");
draw(s, p, 0, 0, len);
p = 0;
strcpy(s,"peepfefepfefe");
//int p = 0;
draw(s, p, 0, 0, len);
for(m=0;
m<32;
m++){
for(n=0;
n<32;
n++)
printf("%d",buf[m][n]);
printf("\n");
}_sleep(5*1000);
system("cls");
memset(s, '\0', sizeof(s));
memset(buf, 0, sizeof(buf));
p = 0;
cnt = 0;
strcpy(s,"ppefefpefefee");
draw(s, p, 0, 0, len);
p = 0;
strcpy(s,"peepefefpefef");
//int p = 0;
draw(s, p, 0, 0, len);
for(m=0;
m<32;
m++){
for(n=0;
n<32;
n++)
printf("%d",buf[m][n]);
printf("\n");
}
// }
// printf("There are %d black pixels.\n", cnt);
// }
}
return 0;
}