一道简单的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 osimport 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))
编码不易,如果有帮助的话点个赞支持一下吧~~~
总结以上是内存溢出为你收集整理的危险系数---Python练习全部内容,希望文章能够帮你解决危险系数---Python练习所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)