卡码网刷题一之获取连通的相邻节点列表
哇丢~~~果然工作后就没时间刷题了,先来个简单的试试水
- 题目描述:
在网元内,存在了 N 个转发节点,每个转发节点有自己唯一的标识 TB 且每个节点有 M 个端口,节点间通过端口进行报文通讯。出于业务隔离的需求,服务器内的端口被划分为多个通讯平面(用 VLAN 隔离,每个 VLAN 都有一个 VLAN ID作为标识) 1、如果两个端口的VLAN ID相同,则说明这两个端口处于同个 VLAN,且处于连通状态; 2、如果两个端口的VLAN ID不同,则说明这两个端口处于不同 VLAN,彼此不连通; 现给出节点 A 的端口数及其各端口所属的 VLAN ID,以及节点 A 相邻的其他节点和端口信息。 要求获取与节点 A 处于连通状态的所有相邻节点的 TB 列表(按 TB 从小到大顺序输出
- 输入描述 第 1 行: M VLAN_ID_1...VLAN_ID_m 数据间有空格隔开,分别表示: 节点 A 有 M 个端口,各个端口所属的 VLAN_ID,即后面 VLAN_ID_m 表示第 m 个端口的 VLAN ID。 其中,网元内节点的端口数量 M 的取值范围为[1,4]; 端口划分 VLAN ID 的取值范围为[1,4]; 第 2 行: N 表示与节点 A 相邻的其他节点有 N 个,N 的取值范围为[0,4000) 第 3 行开始,将有 N 行数据,分别描述与节点 A 相邻的节点的 TB 和端口信息 输入格式为: TBx Mx VLAN_ID_xx...VLAN_ID_xm 数据间有空格隔开, 分别表示: 节点 x 的 TBx,有 Mx 个端口,各个端口所属的 VLAN_ID,即后面 VLAN_ID_xm 表示第 m 个端口的 VLAN ID。 其中,网元内节点 TB 的取值范围为(0,4294967295);
- 输出 第 1 行: N 表示与节点 A 连通的相邻节点个数,如 N 为 0,则无需在输出其他信息 第 2 行: TB_1...TB_n 数据间有空格隔开,分别表示:与节点 A 连通的相邻节点的 TB,个数为 N,按从小到大的顺序输出。
- 输入示例 1 1 3 1024 2 1 2 1023 1 1 1025 3 2 2 3 输出示例 2 1023 1024
#输入A节点的端口数以及VID A = list(map(int,input().split(" "))) m=int(input()) re=[] #A节点端口数 A_num=A[0] #A节点每个端口对应的VID A_VID=A[1:] for i in range(m): tmp=list(map(int,input().split(" ")))、 for j in range(tmp[1]): #如果邻节点的VID在A节点的VID列表中,说明两个节点相通 if tmp[j+2] in A_VID and tmp[0] not in re: re.append(tmp[0]) re.sort() print(len(re)) print(" ".join(map(str, re)))