1. 程式人生 > >四分樹 (Quadtrees UVA - 297)

四分樹 (Quadtrees UVA - 297)

std [] 矩陣 amp dfs alt con build 過程

題目描述:

原題:https://vjudge.net/problem/UVA-297

技術分享圖片

題目思路:

1.依舊是一波DFS建樹 //矩陣實現

2.建樹過程用1.0來填充表示像素

 1 #include <iostream>
 2 #include <cstring>
 3 using namespace std;
 4 
 5 const int maxn = 1024 + 5;
 6 const int len = 32 ;
 7 int tree[len][len],pcount;
 8 char str[maxn];
 9 
10 void
buildtree(char* str,int& pos,int r,int c,int w)//用矩陣來實現四分樹 11 { 12 char ch = str[pos++] ; 13 if(ch == p) 14 { 15 buildtree(str, pos, r, c+w/2, w/2); // 這個樹的第一個結點 16 buildtree(str, pos, r, c , w/2); // 2 17 buildtree(str, pos, r+w/2, c , w/2); // 3
18 buildtree(str, pos, r+w/2, c+w/2, w/2); // 4 19 } 20 else if(ch == f) //填像素並統計 ==0說明沒填過 21 { 22 for(int i = r; i < r+w; i++) 23 for(int j = c; j < c+w; j++) 24 if(tree[i][j] == 0) { tree[i][j] = 1; pcount++; } 25 } 26 }
27 28 int main(int argc, char *argv[]) 29 { 30 int t ; 31 cin >> t; 32 while(t--) 33 { 34 memset(tree,0,sizeof(tree)) ; 35 pcount = 0 ; 36 for(int i = 0;i < 2; i++) 37 { 38 cin >> str ; 39 int pos = 0; 40 buildtree(str,pos,0,0,len) ; 41 } 42 cout << "There are "<< pcount <<" black pixels." << endl ; 43 } 44 return 0; 45 }

四分樹 (Quadtrees UVA - 297)