OD 算法题 B卷【文件目录大小】
文章目录
- 文件目录大小
文件目录大小
- 一个文件目录的数据格式为:目录id,本目录中文件大小,(子目录id列表),其中目录id唯一,取值在【1,200】,目录中文件大小范围【1,1000】,子目录id列表长度【0,10】;
- 例子:1 20 (2,3) 表示目录1中的文件总大小为20,有两个子目录,id分别为2和3;
- 输入一个文件系统中所有的目录信息及待查询的目录id,返回待查询目录及其所有子目录的大小之和;
输入描述:
第一行输入m, n, 分别表示目录的个数及待查询目录id; m在【1,100】,n在【1, 200】;
后续m行,每行为一个目录数据;
输出描述:
待查询目录及其子目录的大小之和;
示例1
输入:
3 1
3 15 (0)
1 20 (2)
2 10 (3)
输出:
45
示例2
输入:
4 2
4 20 ()
5 30 ()
2 10 (4,5)
1 40 ()
输出:
60
python实现
- DFS,递归函数栈
m, n = list(map(int, input().strip().split()))dir_data = []
for i in range(m):dir_id, dir_size, sub_dir = input().strip().split()digits = []for c in sub_dir.replace("(", "").replace(")", "").split(","):if c.isdigit():digits.append(int(c))dir_data.append([int(dir_id), int(dir_size), digits]) # 如 [[4, 20, []], [5, 30, []], [2, 10, [4, 5]], [1, 40, []]]print(dir_data)
result = 0# DFS 借助栈、函数栈
def dfs(n, dir_data):global resultfor d in dir_data:if d[0] == n: # 找到目录result += d[1]if not d[2]: # 没有子目录returnfor sub_d in d[2]:dfs(sub_d, dir_data)dfs(n, dir_data)
print(result)