危险系数---Python练习

一道简单的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

思路

深度搜索所有能到达目标站点的路线,然后找出所有路线都包含的站点,这就是要找的关键站点。
危险系数---Python练习

代码

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))

编码不易,如果有帮助的话点个赞支持一下吧~~~

上一篇:大数据开发实战系列之电信客服(1)


下一篇:pytorch与tensorflow网络输入图片通道在前在后(channel_first和channel_last)