九度OJ 1090:路径打印 (树、DFS)
时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:1704
解决:314
- 题目描述:
-
给你一串路径,譬如:
a\b\c
a\d\e
b\cst
d\
你把这些路径中蕴含的目录结构给画出来,子目录直接列在父目录下面,并比父目录向右缩一格,就像这样:
a
b
c
d
e
b
cst
d
同一级的需要按字母顺序排列,不能乱。
- 输入:
-
每个测试案例第一行为一个正整数n(n<=10)表示有n个路径,当n为0时,测试结束,接下来有n行,每行有一个字串表示一个路径,长度小于50。
- 输出:
-
输出目录结构,每一个测试样例的输出紧跟一个空行。
- 样例输入:
-
4
a\b\c
a\d\e
b\cst
d\
0
- 样例输出:
-
a
b
c
d
e
b
cst
d
思路:
根据输入数据建立相应的树,然后DFS输出即可。
代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h> #define N 10
#define LEN 50 typedef struct node {
char name[LEN];
int num;
struct node *children[N];
} Node; void create(Node *root, char s[LEN])
{
if (s[0] == '\0')
return;
int i, j;
char name[LEN];
i = 0;
while (s[i] != '\\' && s[i] != '\0')
{
name[i] = s[i];
i ++;
}
name[i] = '\0';
if (s[i] == '\\')
i++;
//printf("s=%s, name=%s\n", s, name);
for (j=0; j<root->num; j++)
{
if (strcmp(root->children[j]->name, name) == 0)
break;
}
if (j < root->num)//find
root = root->children[j];
else
{
Node *n1 = (Node *)malloc(sizeof(Node));
strcpy(n1->name, name);
n1->num = 0;
root->children[root->num++] = n1;
root = n1;
}
create(root, s+i);
} int cmp(const void *a, const void *b)
{
Node **x = (Node **)a;
Node **y = (Node **)b;
return strcmp((*x)->name, (*y)->name);
} void DFS(Node *root, int addLen)
{
int i;
if (addLen >= 0)
{
for (i=0; i<addLen; i++)
printf(" ");
printf("%s\n", root->name);
}
qsort(root->children, root->num, sizeof(Node *), cmp);
for (i=0; i<root->num; i++)
{
DFS(root->children[i], addLen + strlen(root->name) + 1);
}
} int main(void)
{
int n;
int i;
char s[LEN];
Node root; while (scanf("%d", &n) != EOF && n)
{
root.name[0] = '\0';
root.num = 0;
for (i=0; i<n; i++)
{
scanf("%s", s);
create(&root, s);
} DFS(&root, -1);
printf("\n");
}
}
/**************************************************************
Problem: 1090
User: liangrx06
Language: C
Result: Accepted
Time:0 ms
Memory:912 kb
****************************************************************/
九度OJ 1090:路径打印 (树、DFS)的更多相关文章
- 九度oj 题目1536:树的最小高度
题目描述: 给定一棵无向树, 我们选择不同的节点作为根节点时,可以得到不同的高度(即树根节点到叶子节点距离的最大值), 现在求这棵树可能的最低高度. 输入: 输入可能包含多个测试案例. 对于每个测试案 ...
- 九度OJ 1186:打印日期 (日期计算)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:6366 解决:2214 题目描述: 给出年分m和一年中的第n天,算出第n天是几月几号. 输入: 输入包括两个整数y(1<=y<= ...
- 九度OJ 1120:全排列 (DFS)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4471 解决:1139 题目描述: 给定一个由不同的小写字母组成的字符串,输出这个字符串的所有全排列. 我们假设对于小写字母有'a' < ...
- 九度OJ 1126:打印极值点下标 (基础题)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4613 解决:1646 题目描述: 在一个整数数组上,对于下标为i的整数,如果它大于所有它相邻的整数, 或者小于所有它相邻的整数,则称为该整 ...
- 【九度OJ】题目1176:树查找 解题报告
[九度OJ]题目1176:树查找 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1176 题目描述: 有一棵树,输出某一深度的所有节点 ...
- 【九度OJ】题目1172:哈夫曼树 解题报告
[九度OJ]题目1172:哈夫曼树 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1172 题目描述: 哈夫曼树,第一行输入一个数n, ...
- 【九度OJ】题目1126:打印极值点下标 解题报告
[九度OJ]题目1126:打印极值点下标 解题报告 标签(空格分隔): 九度OJ [LeetCode] http://ac.jobdu.com/problem.php?pid=1126 题目描述: 在 ...
- 九度OJ 1371 最小的K个数 -- 堆排序
题目地址:http://ac.jobdu.com/problem.php?pid=1371 题目描述: 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4 ...
- 九度oj题目&吉大考研11年机试题全解
九度oj题目(吉大考研11年机试题全解) 吉大考研机试2011年题目: 题目一(jobdu1105:字符串的反码). http://ac.jobdu.com/problem.php?pid=11 ...
随机推荐
- 【BZOJ1103】大都市meg(DFS序,树状数组)
题意:有一颗树,1号点为根,保证编号小的点深度较小,初始状态每条边都没有被标记,要求实现两个操作在线: A:将连接x,y的边标记 W:查询从1到x的路径上有多少条边未被标记 n<=2*10^5 ...
- [LeetCode] Jump Game 数组控制
Given an array of non-negative integers, you are initially positioned at the first index of the arra ...
- 转 Python爬虫入门五之URLError异常处理
静觅 » Python爬虫入门五之URLError异常处理 1.URLError 首先解释下URLError可能产生的原因: 网络无连接,即本机无法上网 连接不到特定的服务器 服务器不存在 在代码中, ...
- grep用法详解:grep与正则表达式【转】
转自:http://blog.csdn.net/hellochenlian/article/details/34088179 grep用法详解:grep与正则表达式 首先要记住的是: 正则表达式与通配 ...
- linux之Deamon进程创建及其进程exit,_exit,return之间的区别
Dameon进程又被称做守护进程,一般来说他有以下2个特点: 1.生命周期非常长,一旦启动,一般不会终止,直到系统推出,不过dameon进程可以通过stop或者发送信号将其杀死 2.在后台执行,不跟任 ...
- Charger Battery Warning Message 的 改善
今天與人聊到有關 charger battery safety 的 warning message, 認為說 warning message 真的有起到 保護 user 的作用? 譬如: batter ...
- 牛客网 牛客练习赛7 D. 珂朵莉的无向图(多源BFS)
题目链接 Problem D 比赛的时候完全想不到 直接对给定的这些点做多源$BFS$,把给定的这些点全都压到队列里,然后一个个做. 最后统计被访问的点的个数即可. #include <bit ...
- Codeforces 245G Suggested Friends 暴力乱搞
G. Suggested Friends time limit per test 2 seconds memory limit per test 256 megabytes input standar ...
- RabbitMQ 最常用的三大模式
目录 Direct 模式 Topic 模式 Fanout 模式 Direct 模式 所有发送到 Direct Exchange 的消息被转发到 RouteKey 中指定的 Queue. Direct ...
- python 常用库, 随时添加中
python只有你想不到的库,只要你能想到,肯定有对应的库 前面*的为标准库,**的是pip里面的,***则是要手动安装的1)python运行时服务* copy: copy模块提供了对复合(compo ...