设一个无向图的邻接矩阵如下图所示,若以邻接矩阵表示有向图,则邻接矩阵

  设一个无向图的邻接矩阵如下图所示,若以邻接矩阵表示有向图,则邻接矩阵

  Python求解:用邻接矩阵判断有向图的连通性WoW,让我们先来看看我们要解决的小问题:

  3354输出任意有向图G作为行和列输入中的图G,用可达矩阵判定图G是否连通:

  (PS)确定图的连通性至少有三种方法:[1]。平行检查组[2]。其他解决方案详见https://blog.csdn.net/weixin _ 44646116/article/detective。

   当然,今天我们主要从数学角度探讨如何利用邻接矩阵来判断图的连通性:

  首先,你需要一点数学知识。3358 www.sina.com/(邻接矩阵)是表示顶点之间邻接关系的矩阵。设g=(v,e)是一个图,其中V={v1,v2,…,vn}

  以及V和E的集合。其中V是顶点,E是边。所以图中所有顶点数据都是一维排列存储的;

  二维数组存储顶点(边或弧)之间关系的数据,称为邻接矩阵。邻接矩阵分为有向图邻接矩阵和有向图邻接矩阵;

  www.Sina.com/http://www.Sina.com/http://www.Sina.com 3358号

  邻接矩阵用于表示顶点之间的邻接关系。

  用序列表存储顶点信息。

  (一)邻接矩阵

   在图的邻接

  3558 www.sina.com/(可达矩阵)是指一个有向图的节点可以通过一定长度的路以矩阵的形式到达的程度。可达矩阵的计算方法利用了布尔矩阵的运算性质。

  中的布尔矩阵指的是方阵,矩阵中第I行对应的元素与第I列相同。

  矩阵

  表示法中:

  #确定有向图连通性的编程要部署importnumpyasNP#numpy模块,必须先安装import networkx as nx# Deploy numpy模块,然后安装它用于绘制图。导入matplotlib.pyplot作为plt#引入matplotlib.plot #。同样,有向图ImportPyLab-for _ in range(n):a . append(list)map(int,input()。rstrip(。分裂))因为我被吸引了。N) :#可计算矩阵——这里是上图所示的可计算矩阵的数学解。value _1=NP.mat mul(见value _1,x) sum _ 1=sum _ 1value _ 1Sum _ 2Sum _ 2。矩阵中所有较大的剩余元素(全零)都成为假印刷(这个有向图的可达矩阵是()印刷)。

  lity _ matrix reachability _ matrix . t for I in range(1,n):同上。其实我们应该补一个函数value_2=np.matmul(value_2,y)sum _ 3=sum _ 3 value _ 2 sum _ 4=sum _ 3 NP . identity(n)reachability _ matrix _ 1=sum _ 40.5 #-。n))。astype(int))。all()): print(这个有向图G是强连通图或者它是无向连通图)# print (np.ones ((n,n))。由于type (int))默认生成all-1矩阵,其中元素为float类型,所以要多注意elif ((final。astype (int)==np.ones ((n,n))。astype (int))。all ()): print(这个有向图G是单向连通图)elif ((reachability _ matrix _ 1。astype (int)=N))。astype(int))。all()): print(这个有向图G是弱连通图)else: print(这个有向图不连通)# -。下面显示了图形输出有向图gg=nx.digraph()对于范围(0,N)中的I:#标记标签G.add_node(i,desc=v str(i))#命名范围(0,N)中p的标签:#双循环扫描并输出范围(0,N)中Q的位置其中所有元素都为1: if (x [p,q]==1): g.add _ edges _ from ([(p,q)], weight= 1 )edge _ labels=dict([(()D in g . edges(data=true)])edge _ colors=[ black ]pos=NX . spring _ layout(g)# Mark node _ labels=NX . get _ node _ attributes by pos(g,desc )NX . Draw _ networkx _ labels(g,pos,labels=node _ labels) # Draw标签nx.draw _ networkx _ edge _ labels (g,pos,edge _ labels=edge _ labels)NX . Draw(g,pos, Node _ size=1500,edge _ color=edge _ colors,edge _ cmap=PLT . cm . red)#有向图属性plt.title(有向图,Fontsize=10) #有向图名pylab.show() #嗯,我知道我的代码风格不好,不要

  给出相应代码实现结果:

  [1].在第一行输入矩阵的顺序。

  [2].后面将相关数据依次按顺序输入矩阵

   注意相关输入格式:

  生成的图形化有向图G(Directed Graph):

  最终页面展示:

  [1].如何安装相应模块:https://博客。csdn。net/QQ _ 43201403/文章/详情/102336114

  [2].关于数组模块使用的相关文档:https://www . cn blogs . com/python fl/p/12257698 . html

  [3].网络x模块使用的相关文档:1.https://博客。csdn。net/your _ answer/文章/详情/791896602.https://转兰。胡志。com/p/40852672

  [4].利用netwokx绘图:https://blog.csdn.net/qq_32284189/article/details/80134768?UTM _ medium=分销。PC _相关。none-task-blog-2 ~ default ~ blogcommendfromachinelernpai 2 ~ default-2。控制深度_ 1-UTM _源=分布。PC _相关。none-task-blog-2 ~ default ~ blogcommendfromachinelernpai 2 ~ default-2。控制

  [5].计算机编程语言中全部()与任何()的区别:https://blog.csdn.net/cython22/article/details/78829288?UTM _ medium=分销。PC _相关。none-task-blog-2 ~ default ~ blogcommendfrombaudi ~ default-5。控制深度_ 1-UTM _源=分布。PC _相关。none-task-blog-2 ~ default ~ blogcommendfrombaudi ~ default-5。控制

  最后,如果有相应错误,还请在评论区内多多指出。(代码太渣,轻喷)

  针对编写中容易出现错误的部分,给出相关链接:

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: