读取二元组列表,打印目录的层级结构-----C++算法实现
2013-06-30 22:45
399 查看
要求是--某个文件中存储了一个最多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; }
实际跑出来的图
相关文章推荐
- Java实现当前目录下的所有子目录和文件,并按层级打印
- python实现树形打印目录结构
- Hibernate辅助实现系统目录的树形结构的打印
- 从尾到头打印列表 java实现 剑指offer原题 java实现栈结构
- Java控制台打印出输入路径下的目录层级结构
- Android-listview实现多级树列表(文件夹目录结构和企业级通讯录结构)
- java实现以树结构打印一个文件目录结构
- 利用一个简单的递归实现打印目录的层次结构
- 禁止 Apache 显示目录结构列表
- C语言实现读取目录和文件
- 使用oracle 9i 里的层级查询(Hierarchical Queries)实现树状表结构的递归数据查询
- pureftp 读取目录列表失败解决办法
- CaptainGan------使用递归方法实现,向FTP服务器上传整个目录结构、从FTP服务器下载整个目录到本地的功能
- 数据库层级结构实现
- XML层级读取目录(递归方式)
- Python实现读取目录所有文件的文件名并保存到txt文件代码
- java、js中实现无限层级的树形结构(类似递归)
- mybatis实现读取树结构数据实例代码
- 输出目录结构(路径打印)
- python 实现树结构的打印