要求是--某個文件中存儲了一個最多3層的層級結構,其中每一個元素都是一個天然數,它的存儲方法是一個二元組的列表,每一個二元組的形式爲:(元素,父元素)。如今但願可以經過讀取該二元組列表,打印出目錄的層級結構。ios
源代碼部分ssh
文件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; }
實際跑出來的圖spa