图 ->四分树



【图 ->四分树】图论模型 非二叉树,,<四叉树>
_____无聊的慌,随便改的一个四分树代码,< 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; }



    推荐阅读