九度OJ 1090:路径打印 (树、DFS)
来源:互联网 发布:淘宝客如何分享优惠券 编辑:程序博客网 时间:2024/05/29 15:57
- 题目描述:
给你一串路径,譬如:
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。
- 输出:
输出目录结构,每一个测试样例的输出紧跟一个空行。
- 样例输入:
4a\b\ca\d\eb\cstd\0
- 样例输出:
a b c d eb cstd
- 来源:
- 2005年上海交通大学计算机研究生机试真题
思路:
根据输入数据建立相应的树,然后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****************************************************************/
0 0
- 九度OJ 1090:路径打印 (树、DFS)
- 九度OJ--1090--路径打印
- 九度 oj 题目1090:路径打印
- 九度oj 1120 递归(dfs)
- 九度OJ 打印日期 (模拟)
- 九度1090-路径打印-多叉树
- 九度oj 题目1008:最短路径问题 【ZJU2010考研机试题4】【dij+dfs】
- 九度OJ 1114:神奇的口袋 (DFS、DP)
- 九度OJ 1120:全排列 (DFS)
- 九度OJ 1123:采药 (01背包、DP、DFS)
- 九度OJ 1160:放苹果 (DFS)
- 九度OJ 1251:序列分割 (DFS)
- 九度OJ 1186:打印日期 (日期计算)
- C++ 打印极值点下标(九度OJ 1126)
- 九度OJ题目1186:打印日期
- 九度oj-1391-顺时针打印矩阵
- 九度OJ-1186:打印日期
- 【九度OJ】:从头打印链表
- 回文链表
- 欢迎使用CSDN-markdown编辑器
- iOS开发学习之C语言---C06 结构体-1
- Kali Linux 安装完成后的网络配置
- Android提高篇之Adapter的抽象整合
- 九度OJ 1090:路径打印 (树、DFS)
- 划分数
- iOS开发学习之C语言---C06 结构体-2
- boost 之 format
- 从头认识java-2.3 自增自减与关系操作符
- HDU1040
- 【转】java基础:动态存储方式与静态存储方式
- iOS开发学习之C语言---C07 指针-1
- 压缩感知