标签:channels Python 练习 len --- keys key 站点 append
一道简单的dfs题
题目描述
抗日战争时期,冀中平原的地道战曾发挥重要作用。
地道的多个站点间有通道连接,形成了庞大的网络。但也有隐患,当敌人发现了某个站点后,其它站点间可能因此会失去联系。
我们来定义一个危险系数DF(x,y):
对于两个站点 x 和 y (x!=y), 如果能找到一个站点 z,当 z 被敌人破坏后,x 和 y 不连通,那么我们称z 为关于 x,y 的关键点。相应的,对于任意一对站点 x 和 y,危险系数 DF(x,y) 就表示为这两点之间的关键点个数。
本题的任务是:已知网络结构,求两站点之间的危险系数。
输入描述
输入数据第一行包含 2 个整数n (2≤n≤1000),m (0≤m≤2000),分别代表站点数,通道数;
接下来 mm 行,每行两个整数 u,v (1≤u,v≤n,u!=v) 代表一条通道;
最后 1 行,两个数 u,v,代表询问两点之间的危险系数 DF(u, v)。
输出描述
输出一个整数,如果询问的两点不连通则输出 -1.
输入输出样例
示例
输入
7 6
1 3
2 3
3 4
3 5
4 5
5 6
1 6
输出
2
思路
深度搜索所有能到达目标站点的路线,然后找出所有路线都包含的站点,这就是要找的关键站点。
代码
import os
import sys
# 请在此输入您的代码
m=list(map(int,input().split()))
Number_sites=m[0]
Number_channels=m[1]
channels=dict()
for i in range(Number_channels):
n=list(map(int,input().split()))
if n[0] not in channels:
channels[n[0]]=[]
channels[n[0]].append(n[1])
if n[1] not in channels:
channels[n[1]]=[]
channels[n[1]].append(n[0])
m=list(map(int,input().split()))
start=m[0]
end=m[1]
key=[]
keys=[]
def con(now):
global channels,end,key,keys
a=channels[now]
if end in a:
if len(key)==0:
for i in range(len(keys)):
key.append(keys[i])
else:
temp=[]
for i in range(len(key)):
if key[i] in keys:
temp.append(key[i])
key.clear()
for i in range(len(temp)):
key.append(temp[i])
return
for i in range(len(a)):
if a[i] in keys:
continue
keys.append(a[i])
con(a[i])
del keys[-1]
con(start)
print(len(key))
编码不易,如果有帮助的话点个赞支持一下吧~~~
标签:channels,Python,练习,len,---,keys,key,站点,append 来源: https://blog.csdn.net/mycocoo/article/details/115359195
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。