Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 树型简单数据操作_C++_Tree_Octree - Fatal编程技术网

C++ 树型简单数据操作

C++ 树型简单数据操作,c++,tree,octree,C++,Tree,Octree,我们的任务是创建一个包含蓝色和白色体素的八叉树。然而,我只能够得到1级和2级输入的正确答案 详情: p-表示大体素仍然需要划分为八分之一 体素是蓝色的 w-体素是白色的 假设未指定任何颜色的体素为白色 输入:N表示要相互添加多少对 正确输出: 4096 3072 2048 1184 输入: 4 b w pbbbbwwww pbwbwbwbw pbpbbwwwwbbwwwwpbbwwwwbbb ppbbwwwwbbbwwwwbpbbwwwwbb pppbwwwwwbwwwwwwbwwwwww

我们的任务是创建一个包含蓝色和白色体素的八叉树。然而,我只能够得到1级和2级输入的正确答案

详情:

  • p-表示大体素仍然需要划分为八分之一

    • 体素是蓝色的
    • w-体素是白色的
  • 假设未指定任何颜色的体素为白色

  • 输入:N表示要相互添加多少对
  • 正确输出:

    4096
    3072
    2048
    1184
    
    输入:

    4
    b
    w
    pbbbbwwww
    pbwbwbwbw
    pbpbbwwwwbbwwwwpbbwwwwbbb
    ppbbwwwwbbbwwwwbpbbwwwwbb
    pppbwwwwwbwwwwwwbwwwwwwbw
    pwpwpwbwwwwwbwwwwwbwwwwwb
    
    八叉树:

    #include <iostream>
    #include <queue> 
    #include <string>
    #include <cmath>
    using namespace std; 
    
    int N,lvl;
    string s1,s2;
    int index_a = 0;
    int index_b = 0;
    int VCount();
    
    struct Node 
    { 
        char data;
        vector<Node *>child; 
    }; 
    
    Node *newNode(char data) 
    { 
        Node *temp = new Node; 
        temp->data = data;
        return temp; 
    } 
    
    Node *root;
    int Voxels(vector<Node *> _root, int level);
    
    
    int main() 
    { 
        cin>>N;
        for(int i=0;i<N;i++){
            root = newNode('w');
            cin>>s1;
            cin>>s2;
                lvl = 1;
                for(int j = 0; s1[j] != '\0'; j++){
                    if(s1[j] == 'p')
                        lvl++;
                }
            cout<<VCount();
            cout<<'\n';
            index_a = 0;
            index_b = 0;
            lvl = 0;
        }     
    return 0;   
    }  
    
    int VCount(){
    
        int _vox = 0;
    
            for(int l = 0; l < 8; l++)                                                                      //  Level 1
                (root->child).push_back(newNode('w'));   
                    if (lvl == 1)
                    return Voxels(root->child,1);
    
                if (lvl >= 2){
                     for(int k = 0; k < 8; k++){                                                             //  Level 2
                        for(int j = 0; j < 8; j++){
                            (root->child[k]->child).push_back(newNode('w'));
                        }
                     }
                    _vox = Voxels(root->child,2);
    
    
                if (lvl >= 3){
                    for(int l = 0; l < 8; ++l){
                        for(int k = 0; k < 8; k++){                                                         //  Level 3
                            for(int j = 0; j < 8; j++){
                                (root->child[l]->child[k]->child).push_back(newNode('w')); 
                            }
    
                        }
                        _vox += Voxels(root->child[l]->child,3);
                    }
    
    
                    if (lvl == 4){
                        for(int l = 0; l < 8; l++){      
                            for(int k = 0; k < 8; k++){                                                     //  Level 4
                                for(int j = 0; j < 8; j++){
                                    for(int i = 0; i < 8; i++)
                                        (root->child[l]->child[k]->child[j]->child).push_back(newNode('w'));   
                                }
                            _vox += Voxels(root->child[l]->child[k]->child,4);
                        }
                      }
                    }
    
                }
    
            }
    
        return _vox;  
    }
    
    int Voxels(vector<Node *> _root, int level){
    int _voxels = 0;
    int _ind;
    int branch = 0;
    
            if(s1.size() == 1){
                    if(s1[index_a] =='b' || s2[index_b] == 'b')
                        return 4096;
                    else
                        return 0;
                }
    
            index_a++;
            index_b++;
            _ind = index_a;
    
    
                if(s1[index_a] != 'p' && s2[index_b] != 'p'){
                    for(int i = index_a, j = 0; i < s1.size() && s1[i] != 'p'; i++,j++){
                        if(s1[i] == 'b'){
                            _root[branch]->child[j]->data = 'b';
                            _voxels++;
                        }
                        if(j==7){
                            branch++;
                            j=0;
                        }
                        index_a = i;  
                    }
                    for(int i = index_b, j = 0; i < s2.size() && s2[i] != 'p'; i++, j++){
                        if(s2[i] == 'b' && s1[_ind] != 'b'){
                            _root[branch]->child[j]->data = 'b';
                            _voxels++;
                        }
                        if(j==7){
                            branch++;
                            j=0;
                        }
                       _ind++;
                    }
                }
    
    return (4096/pow(8,level-1))*_voxels;
    }
    
    #包括
    #包括
    #包括
    #包括
    使用名称空间std;
    int N,lvl;
    字符串s1、s2;
    int索引_a=0;
    int索引_b=0;
    int VCount();
    结构节点
    { 
    字符数据;
    矢量儿童;
    }; 
    节点*新节点(字符数据)
    { 
    Node*temp=新节点;
    温度->数据=数据;
    返回温度;
    } 
    节点*根;
    int体素(向量_根,int级);
    int main()
    { 
    cin>>N;
    对于(int i=0;i>s1;
    cin>>s2;
    lvl=1;
    对于(int j=0;s1[j]!='\0';j++){
    如果(s1[j]=“p”)
    lvl++;
    }
    coutchild[k]->child.push_-back(newNode('w'));
    }
    }
    _体素=体素(根->子体,2);
    如果(lvl>=3){
    对于(int l=0;l<8;++l){
    对于(int k=0;k<8;k++){//3级
    对于(int j=0;j<8;j++){
    (root->child[l]->child[k]->child);
    }
    }
    _vox+=体素(根->子体[l]->子体,3);
    }
    如果(lvl==4){
    对于(int l=0;l<8;l++){
    对于(int k=0;k<8;k++){//4级
    对于(int j=0;j<8;j++){
    对于(int i=0;i<8;i++)
    (root->child[l]->child[k]->child[j]->child);
    }
    _体素(根->子[l]->子[k]->子,4);
    }
    }
    }
    }
    }
    返回_vox;
    }
    整数体素(向量_根,整数级){
    int _体素=0;
    国际工业;
    int分支=0;
    如果(s1.size()==1){
    if(s1[索引a]=“b”| s2[索引b]=“b”)
    返回4096;
    其他的
    返回0;
    }
    索引_a++;
    索引_b++;
    _ind=指数a;
    如果(s1[索引a]!='p'和s2[索引b]!='p'){
    对于(int i=index_a,j=0;i子[j]->data='b';
    _体素++;
    }
    如果(j==7){
    branch++;
    j=0;
    }
    指数a=i;
    }
    对于(int i=index_b,j=0;i子[j]->data='b';
    _体素++;
    }
    如果(j==7){
    branch++;
    j=0;
    }
    _ind++;
    }
    }
    返回(4096/pow(8,1级))*体素;
    }
    
    我看不出您在哪里读取输入的最后四行。输出代表什么?您成对地读取它们并将它们相加。B+B=B,B+W=B,W+W=W:)如果您谈论的是输入,如果它们没有被读取,那么就没有什么可添加的。如果你说的是输出,这些都是数字——这些数字代表什么?我看不出你在哪里读到输入的最后四行。输出代表什么?您成对地读取它们并将它们相加。B+B=B,B+W=B,W+W=W:)如果您谈论的是输入,如果它们没有被读取,那么就没有什么可添加的。如果你说的是输出,这些都是数字——这些数字代表什么?