解释代码 quadtree *DFS(int r,int c,int s)//行号列号间隔 { int i; bool f=true; quadtree *temp=new quadtree; if(s==1)//最小格就赋值 { temp->value='0'; temp->value+=MAP[r][c]; return temp; } s/=2; temp->q[0]=DFS(r,c,s);//跳格继续递归 temp->q[1]=DFS(r,c+s,s); temp->q[2]=DFS(r+s,c,s); temp->q[3]=DFS(r+s,c+s,s); for(i=1;i<4;++i)//检测是否需要合并 { if(!(*temp->q[0]==*temp->q[i])||temp->q[0]->value=="1")//不用合并 { f=false; break; } } if(f)//需要 { temp->value=temp->q[0]->value; for(i=0;i<4;++i) { delete temp->q[i]; temp->q[i]=NULL;//防止野指针 } } else temp->value="1"; return temp; }
时间: 2024-03-30 08:35:03 浏览: 48
Algorithm-QuadTree-0.1.tar.gz_数值算法/人工智能_Perl_
这是一个递归实现二维四叉树的代码。quadtree表示四叉树节点的结构体,其中q数组表示四叉树的四个子树,value表示节点的值。函数DFS用于生成二维四叉树,参数r、c、s分别表示当前节点所在的行号、列号和间隔大小。如果当前节点对应的区域只有一个格子,那么直接返回一个值为该格子值的节点。如果当前节点对应的区域不止一个格子,就将其分成四个子区域,每个子区域递归生成一个子树,并将四个子树分别存储在当前节点的q数组中。然后检测这四个子树是否需要合并,如果需要合并,则当前节点的值等于子树的值,子树都被删除;否则当前节点的值为1。最后返回当前节点。
阅读全文