问题:关节点和重连通分量

题目描述
假若在删去顶点v以及和v相关联的各边之后,将图的一个连通分量分割成两个或两个以上的连接分量,则称顶点v为该图的一个关节点。一个没有关节点的连通图称为重连通图。在重连通图上,任意一对顶点之间至少存在两条路径,则在删去某个顶点以及依附于该顶点的各边时也不会破坏图的连通性。
利用深度优先搜索可以求出图的关节点,并由此可以判断图是否是重连通的。
通过修改深度优先搜索遍历的算法便可以得到求关节点的算法,其算法描述如下:
在本题中,读入一个无向图的邻接矩阵(即数组表示),建立无向图并按照以上描述中的算法求出所有的关节点,并输出这些关节点。

输入 :
输入的第一行包含一个正整数n,表示图中共有n个顶点。其中n不超过50。
以后的n行中每行有n个用空格隔开的整数0或1,对于第i行的第j个整数,如果为1,则表示第i个顶点和第j个顶点有直接连接,0表示没有直接连接。当i和j相等的时候,保证对应的整数为0。
输入保证邻接矩阵为对称矩阵,即输入的图一定是无向图,且保证图中只有一个连通分量。
输出:
第一行有一个整数x,即图中关节点的个数。
第二行输出x个整数,表示所有关节点的顶点编号,请按照编号从小到大的顺序输出。每个整数后输出一个空格,并请注意行尾输出换行。
样例输入
4
01 1 1
1 0 0 0
1 0 0 0
1 0 0 0
样例输出
1
0
提示
在本题中,需要掌握图的深度优先遍历的方法,并需要掌握通过深度优先搜索求得图中关节点的算法。通过生成深度优先生成树可以得出两类关节点的特性:

  • 若生成树的根有两棵或两棵以上的子树,则此根顶点必为关节点。

  • 若生成树中某个非叶子顶点v,其某棵子树的根和子树中的其他结点均没有指向v的祖先的回边,则说明v是关节点。

注意以上两点特性,就可以成功的通过深度优先搜索遍历的算法得出图中的关节点了。

代码展示:

n = int(input())
visited=[0]*n#访问列表,用于判断节点访问状态
low=[1000000]*n#初始化权值列表
count=0
end_ans=[]#结果列表
def DFS(G,v0):global count,visited,low,n,end_anscount+=1visited[v0]=min=countfor i in range(0,n):if G[v0][i]!=0:#读入邻接节点if visited[i]==0:DFS(G,i)if low[i]<min:min=low[i]if low[i]>=visited[v0]:end_ans.append(v0)else:if visited[i]<min:min=visited[i]low[v0]=mindef FindArticul(G):global  visited,count,n,end_ansvisited[0]=1count=1for i in range(1,n):if G[0][i]!=0:DFS(G,i)if count<n:end_ans.append(0)while i<n:if G[0][i]!=0 and visited[i]==0:DFS(G,i)i+=1return
if __name__=='__main__':G=[]#无向连通图-邻接矩阵形式for i in range(0, n):res = input()ans = res.split(' ')G.append([int(i) for i in ans])FindArticul(G)print(len(end_ans))end_ans.sort()for i in end_ans:print(i,end=' ')print()

关节点和重连通分量,trajan算法实现(python)相关推荐

  1. pythond的执行原理_D*路径规划算法及python实现

    1.简介 "D*算法"的名称源自 Dynamic A Star,最初由Anthony Stentz于"Optimal and Efficient Path Plannin ...

  2. 文本相似度计算——Simhash算法(python实现)

    互联网网页存在着大量重复内容,必须有一套高效的去重算法,否则爬虫将做非常多的无用功,工作时效性无法得到保证,更重要的是用户体验也不好.业界关于文本指纹去重的算法众多,如 k-shingle 算法.go ...

  3. 《数据结构与算法:Python语言描述》一1.3算法和算法分析

    本节书摘来自华章出版社<数据结构与算法:Python语言描述>一书中的第1章,第1.3节,作者 裘宗燕,更多章节内容可以访问云栖社区"华章计算机"公众号查看 1.3算法 ...

  4. 各省新高考等级赋分算法实现——python版

    各省新高考等级赋分算法实现--python版 一.前言 新高考从2014年启动,目前已经有14个地区(省.市)实行了新高考改革分别是:浙江.上海.北京.山东.天津.海南.湖南.广东.江苏.重庆.河北. ...

  5. 数据结构与算法(Python)【PKU MOOC】

    数据结构与算法(Python) 一. Python数据类型的性能 1.list 列表 列表list所包含的方法 #1 添加: list.append(a_new_element) #在列表末尾添加新的 ...

  6. python数据结构算法_数据结构与算法(Python)

    数据结构与算法(Python) Why? 我们举一个可能不太恰当的例子: 如果将最终写好运行的程序比作战场,我们码农便是指挥作战的将军,而我们所写的代码便是士兵和武器. 那么数据结构和算法是什么?答曰 ...

  7. FP-growth 算法与Python实现

    FP-growth 算法与Python实现 介绍   打开你的搜索引擎,输入一个单词或一部分,例如"我",搜索引擎可能会去统计和"我"一块出现得多的词,然后返回 ...

  8. 基于朴素贝叶斯的垃圾分类算法(Python实现)

    有代码和数据集的 https://blog.csdn.net/weixin_33734785/article/details/91428991 附有git库代码的 https://www.cnblog ...

  9. 手把手教你在多种无监督聚类算法实现Python(附代码)

    来源: 机器之心 本文约2704字,建议阅读6分钟. 本文简要介绍了多种无监督学习算法的 Python 实现,包括 K 均值聚类.层次聚类.t-SNE 聚类.DBSCAN 聚类. 无监督学习是一类用于 ...

最新文章

  1. enter对应的keycode_键盘对应数字-keycode值大全
  2. 机器学习知识点(七)决策树学习算法Java实现
  3. 2.1.5 编码与调制(1)
  4. 最长上升子序列(Longest increasing subsequence)
  5. 高级Java面试题,你敢挑战吗?
  6. MFC中常见控件的操作
  7. java成员修饰词 友好的_Java的类成员访问权限修饰词(以及类访问权限)
  8. 用法getline(cin,a)和cin.getline(a,20) 能将空格输出
  9. 安卓版App开发心得
  10. 移动用户界面的5个设计原则
  11. [Hyper-V]使用操作系统模板创建新的虚拟机
  12. MembershipUserProvider For ScrewTurn 3.0
  13. QCC3003x BLE 设置私有地址
  14. Google Chrome v90.0.4430.212 正式版下载
  15. Springboot 整合dubbo、zookeeper
  16. URL中的特殊格式进行转换
  17. 实验02 使用网络模拟器packet Tracer实验报告
  18. Cadence Orcad Capture修改图纸大小的2种常用方法图文教程及视频演示
  19. 多元线性回归matlab实现
  20. 银行业灾备及业务连续性管理:从混沌走向清明

热门文章

  1. SQLLite (一)基本介绍
  2. Linux网络编程 | 定时事件 :Linux常见定时方法、定时器链表、空闲断开
  3. 小红书shield算法分析
  4. 第11讲:Reqeusts + PyQuery + PyMongo 基本案例实战
  5. 网络编程之Socket【Python】
  6. 如何正确、高效地阅读源代码?
  7. VSCode 阅读 Linux 代码怎么才不卡顿?这样做才能快的飞起!
  8. 面向在线教育业务的流媒体分发演进
  9. WebRTC的现状和未来:专访W3C WebRTC Chair Bernard Aboba(上)
  10. 【线上分享】如何使用开源SFU构建RTC云服务