【华为OD机试】删除目录

编程入门 行业动态 更新时间:2024-10-25 13:25:42

【<a href=https://www.elefans.com/category/jswz/34/1769368.html style=华为OD机试】删除目录"/>

【华为OD机试】删除目录

某文件系统中有N个目录,每个目录都一个独一无二的ID。每个目录只有一个父目录,但每个父目录下可以有零个或者多个子目录,目录结构呈树状结构。假设,根目录的ID为0,且根目录没有父目录,其他所有目录的ID用唯一的正整数表示,并统一编号。
现给定目录ID和其父目录ID的对应父子关系表[子目录ID,父目录ID],以及一个待删除的目录ID,请计算并返回一个ID序列,表示因为删除指定目录后剩下的所有目录,返回的ID序列以递增序输出。
注意:
1、被删除的目录或文件编号一定在输入的ID序列中
2、当一个目录删除时,它所有的子目录都会被删除
输入描述
输入的第一行为父子关系表的长度m;接下来的行为m个父子关系对;最后-
行为待删除的ID。序列中的元素以空格分割,参见样例。
输出描述
输出一个序列,表示因为删除指定目录后,剩余的目录ID.
例1

输入

5
8 6
10 8
6 0
20 8
2 6
8

输出

2 6


说明
目录结构如下所示

    6
  /    \
2      8
      /    \
    10   20

删除目录8,同时它的子目录10也被删除,剩余2和6两个目录

思路:

刚参与的机试,二星题反而比一星的简单,直接上结构体记录节点、父节点和删除标记,用搜索的方式递归往下删除

代码:

#include<bits/stdc++.h>
using namespace std;struct ac {int num;int fa;int del;
} a[1005];bool cmp(ac a, ac b) {return a.num < b.num;
}void find(int n, int x) {for (int i = 0; i < n; i++) {if (a[i].del)continue;if (a[i].num == x || a[i].fa == x) {
//			cout << "---del:" << x << " " << a[i].num << " " << a[i].fa << endl;a[i].del = 1;find(n, a[i].num);}}return;
}int main() {int n, i, delNum;cin >> n;for (i = 0; i < n; i++) {cin >> a[i].num >> a[i].fa;a[i].del = 0;}cin >> delNum;find(n, delNum);
//	for (i = 0; i < n; i++) {
//		cout << a[i].num << " " << a[i].fa << " " << a[i].del << endl;
//	}sort(a, a + n, cmp);for (i = 0; i < n; i++) {if (a[i].del != 1) {cout << a[i].num << " ";}}return 0;
}

更多推荐

【华为OD机试】删除目录

本文发布于:2023-12-05 18:23:56,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1664938.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:华为   目录   OD   机试

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!