- 题目描述:
-
给你一串路径,譬如:
ac
ade
bcst
d
你把这些路径中蕴含的目录结构给画出来,子目录直接列在父目录下面,并比父目录向右缩一格,就像这样:
a
b
c
d
e
b
cst
d
同一级的需要按字母顺序排列,不能乱。
- 输入:
-
每个测试案例第一行为一个正整数n(n<=10)表示有n个路径,当n为0时,测试结束,接下来有n行,每行有一个字串表示一个路径,长度小于50。
- 输出:
-
输出目录结构,每一个测试样例的输出紧跟一个空行。
- 样例输入:
-
4 ac ade bcst d 0
- 样例输出:
-
a b c d e b cst d
这道题我用了比较复杂的数据结构,但题目的输出说的不是很明确,代码如下1 #include <cstdio> 2 #include <cstdlib> 3 #include <cstring> 4 #include <string> 5 #include <cmath> 6 #include <algorithm> 7 #include <queue> 8 #define inf 0x3f3f3f3f 9 #define LenM 52 10 #define ChiM 12 11 using namespace std; 12 13 struct Node 14 { 15 char name[LenM]; 16 int level; 17 int childCount; 18 Node *child[ChiM]; 19 }; 20 21 Node root; 22 char temp[LenM]; 23 char temp2[LenM]; 24 25 int cmp(const void *a, const void *b) { 26 Node *at = *(Node**)a; 27 Node *bt = *(Node**)b; 28 return strcmp(at->name,bt->name); 29 } 30 Node *add(Node *now, char toAdd[]) { 31 bool isFind = false; 32 int findNum = -1; 33 for(int i = 0; i < now->childCount; i++) { 34 if(strcmp(toAdd, (now->child[i])->name) == 0) { 35 isFind = true; 36 findNum = i; 37 break; 38 } 39 } 40 if(!isFind) { 41 Node *childNode = new Node; 42 childNode->level = now->level + 1; 43 strcpy(childNode->name, toAdd); 44 childNode->name[strlen(toAdd)] = '