题目:
现在信用卡开展营销活动,持有我行信用卡客户推荐新户办卡,开卡成功后可获得积分奖励。规定每个客户最多可推荐两个新户且一个新户只能被推荐一次。但允许链接效应,即若客户A推荐了新户B,新户B推荐新户C,则客户C同时属于A和B的推荐列表。简单起见,只考虑以一个老客户A作起点推荐的情况。编程计算推荐新户数不小于n的客户列表。
输入示例:
5 2
A B C
C F *
B D E
D G *
E H I
输入描述:
输入的第一行为以空格分隔的两个正整数,第一个表示原始推荐列表的个数m,第二个表示n的取值。
其后m行每行均为一个以空格分隔的原始推荐列表,第一列为推荐人,后面两列为被推荐人,若该推荐人只推荐了一个新户,则第三列以*替代。推荐人和被推荐人均以大写字母表示,不同字母代表不同的人。
输出示例:
A B E
输出描述:
即在同一行输出符合条件的客户列表,无顺序要求,客户间以空格分隔。若客户列表为空,则输出None。
题目理解:
重点:链接效应——决定深度搜索的树结构
即:在以一个老客户A作为起点的推荐情况建立一棵二叉树,求这棵二叉树上左右两个树枝上数量不小于n的所有结点
解题步骤:
- 建图
- 深度优先搜索
代码:
## 1. 初始化
m,n = map(int,input().split(" "))
#input()取到第一行输入,int把str转换成int;
#map用于多参数多返回值的函数计算,
#例如:res1,res2 = map(func(),输入参数)
#树中所有成员的初始字典——key为输入值, value为对应的树结点对象,提前告诉编译器‘*’值的结点对象为None,否则*.val=*
mem = {
"*":None