• 读取二元组列表,打印目录的层级结构-----C++算法实现


    要求是--某个文件中存储了一个最多3层的层级结构,其中每个元素都是一个自然数,它的存储方法是一个二元组的列表,每个二元组的形式为:(元素,父元素)。现在希望能够通过读取该二元组列表,打印出目录的层级结构。

    源代码部分

    文件Element.h:
    #include <string>
    #include <vector>
    class CElement
    {
    public:
        CElement(void);
        ~CElement(void);
        std::vector<CElement> getChild(std::vector<CElement> v);
    
    public:
        int ele1;
        int ele2;
        int level;
        CElement *child;
        std::string output;
    };
    
    文件Element.cpp:
    #include "Element.h"
    
    CElement::CElement(void)
    {
    }
    
    CElement::~CElement(void)
    {
    }
    
    std::vector<CElement> CElement::getChild(std::vector<CElement> v)
    {
        std::vector<CElement> e;
        std::vector<CElement>::iterator first = v.begin();
        std::vector<CElement>::iterator last = v.end();
        for(;first != last;++first)
        {
            if(first->ele2 == ele1)
                e.push_back( *first);
        }
        return e;
    }
    文件main.cpp
    #include "Element.h"
    #include <iostream>
    #include <vector>
    
    void setLevel(std::vector<CElement> &v)
    {
        std::vector<CElement>::iterator first = v.begin();
        std::vector<CElement>::iterator last = v.end();
        for(; first != last; ++first)
        {
            if(first->ele2 == 0)
            {
                first->level = 1;
            }
            else
            {
                std::vector<CElement>::iterator beg = v.begin();
                std::vector<CElement>::iterator ed = v.end();
                for(; beg != ed; ++beg)
                {
                    if(first->ele2 == beg ->ele1)
                    {
                        if(beg->ele2 == 0)
                            first->level = 2;
                        else
                            first->level = 3;
                    }
    
                }
            }
        }
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        int a[16][2] = {
            {1,},{5,1},{6,1},{12,6},{13,6},{2,},{3,},{4,},{7,1},{8,2},{9,2},{10,3},{11,8},{14,5},{15,3},{16,15}
        };
        std::vector<CElement> v;
        for(int i = 0;i < 16; i++)
        {
            CElement e;
            e.ele1 = a[i][0];
            e.ele2 = a[i][1];
            v.push_back(e);
        }
        setLevel(v);
        std::vector<CElement>::iterator first = v.begin();
        std::vector<CElement>::iterator last = v.end();
    /*
        for(; first != last; ++first)
        {
            std::cout<< (*first).ele1<<"   "<< (*first).ele2<< "   "<<(*first).level<<std::endl;
        }
    */
        std::vector<CElement> v1;
        std::vector<CElement> v2;
        for(; first != last; ++first)
        {
            if(first->level==1)
            {
                std::cout<<first->ele1<<std::endl;
                v1 = first->getChild(v);
                for(int j =0;j<v1.size();++j)
                {
                    std::cout<<"-"<<v1[j].ele1<<std::endl;
                    v2 = v1[j].getChild(v);
                    if(v2.size() > 0)
                    for(int k =0;k<v2.size();++k)
                        std::cout<<"--"<<v2[k].ele1<<std::endl;
                }
            }            
        }
        int t;
        std::cin>>t;
        return 0;
    }

    实际跑出来的图

    sshot-5

  • 相关阅读:
    科学家质疑当今商用量子计算机的性能
    科学家研制出可模拟大脑信息处理的微芯片
    2014年电子科技市场衰退
    号外!CentOS 宣布加入红帽公司!
    hadoop,高富帅的玩具?
    成为Linux内核高手的四个方法
    分阶段事件驱动架构【SEDA】
    原型程式设计【原型语言】
    IOS7.1 企业应用 证书无效 已解决
    iOS7.1企业应用"无法安装应用程序 因为证书无效"的解决方案
  • 原文地址:https://www.cnblogs.com/chunge2050/p/3164046.html
Copyright © 2020-2023  润新知