图 ->四分树


图论模型 非二叉树,,<四叉树>

_____无聊的慌,随便改的一个四分树代码,< 0 1黑白方块> ,,这得有多无聊,,,


// 题意:给两棵四分树的先序遍历,求二者合并之后(黑色部分合并)黑色像素的个数。p表示中间结点,f表示黑色(full),e表示白色(empty)
// 算法:先建树,然后统计
#include
#include
#include

const 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;
}


你可能感兴趣的:(Algorithm_cpp)