危险系数---Python练习

危险系数---Python练习,第1张

概述一道简单的dfs题题目描述抗日战争时期,冀中平原的地道战曾发挥重要作用。地道的多个站点间有通道连接,形成了庞大的网络。但也有隐患,当敌人发现了某个站点后,其它站点间可能因此会失去联系。我们来定义一个危险系数DF(x,y):对于两个站点x和y(x!=y),如果能找到一个站点

一道简单的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练习所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1188136.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存