64,649
社区成员
发帖
与我相关
我的任务
分享
#include <map>
#include <vector>
using namespace std;
struct Department
{
int id;
char name[32];
bool show;
Department *sub; // 子部门
Department *next; // 同级部门
Department()
{
id = 0;
memset(&name, 0, 32);
sub = NULL;
next = NULL;
show = false;
}
void addSub(Department *dt)
{
if(!sub)
sub = dt;
else
{
Department *next = sub;
while(1)
{
if(next->next == NULL)
{
next->next = dt;
break ;
}
else
next = sub->next;
}
}
}
void out(int space)
{
if(show)
return ;
for(int i = 0; i < space; i++)
printf("-");
printf("%s", name);
show = true;
if(sub)
{
printf("\r\n");
sub->out(space + 1);
}
Department *n = next;
while(n)
{
printf("\r\n");
for(int i = 0; i < space; i++)
printf("-");
printf("%s", n->name);
n->show = true;
if(n->sub)
{
printf("\r\n");
n->sub->out(space + 1);
}
n = n->next;
}
}
};
struct Level
{
int id1;
int id2;
Level()
{
id1 = 0;
id2 = 0;
}
};
typedef std::map<int, Department*> mapDepartment;
typedef mapDepartment::iterator mapDepartmentIter;
typedef std::vector<Level> listLevel;
typedef listLevel::iterator listLevelIter;
mapDepartment gDepartmens;
listLevel gLevel;
void addDepartment(int id, char *name)
{
Department *dt = new Department();
dt->id = id;
strcpy_s(dt->name, 32, name);
gDepartmens[dt->id] = dt;
}
void addLevel(int id1, int id2)
{
Level ll;
ll.id1 = id1;
ll.id2 = id2;
gLevel.push_back(ll);
}
void init()
{
addDepartment(1, "aa");
addDepartment(2, "bb");
addDepartment(3, "cc");
addDepartment(4, "dd");
addDepartment(5, "ee");
addDepartment(6, "ff");
addDepartment(7, "gg");
addLevel(1, 0);
addLevel(2, 1);
addLevel(3, 2);
addLevel(4, 1);
addLevel(5, 6);
addLevel(6, 1);
addLevel(7, 6);
}
void release()
{
mapDepartmentIter iter = gDepartmens.begin();
for(; iter != gDepartmens.end(); iter++)
{
delete iter->second;
}
gDepartmens.clear();
gLevel.clear();
}
void out()
{
// 预处理上下级关系
mapDepartmentIter iter1;
mapDepartmentIter iter2;
listLevelIter iter = gLevel.begin();
for(; iter != gLevel.end(); iter++)
{
iter1 = gDepartmens.find(iter->id1);
iter2 = gDepartmens.find(iter->id2);
if(iter1 != gDepartmens.end() && iter2 != gDepartmens.end())
iter2->second->addSub(iter1->second);
}
// 格式化输出
mapDepartmentIter iterOut = gDepartmens.begin();
for(; iterOut != gDepartmens.end(); iterOut++)
{
iterOut->second->out(0);
}
printf("\r\n");
}
int main()
{
init();
out();
release();
return 0;
}
用map写了一个,丑了点
#include<map>
#include<string>
#include<iostream>
using namespace std;
void find(map<int,int>& mp,int value,int printValue)
{
map<int,int>::iterator iter=mp.find (value);
if(iter == mp.end ())
return;
if(iter->second !=0)
{
cout<<"\t";
find(mp,iter->second ,printValue);
}
else
{
cout<<printValue <<endl;
return;
}
}
void print(map<int,int>& mp)
{
map<int,int>::iterator iter=mp.begin ();
for(;iter!=mp.end ();++iter)
{
find(mp,iter->first,iter->first );
}
}
int main(void)
{
map<int,int> mp;
mp.insert(make_pair<int,int>(1,0));
mp.insert(make_pair<int,int>(2,1));
mp.insert(make_pair<int,int>(3,2));
mp.insert(make_pair<int,int>(4,1));
mp.insert(make_pair<int,int>(5,2));
mp.insert(make_pair<int,int>(6,1));
mp.insert(make_pair<int,int>(7,6));
mp.insert(make_pair<int,int>(8,7));
mp.insert(make_pair<int,int>(9,8));
mp.insert(make_pair<int,int>(10,11));
mp.insert(make_pair<int,int>(11,9));
mp.insert(make_pair<int,int>(12,11));
mp.insert(make_pair<int,int>(13,12));
print(mp);
system("pause");
return 0;
}