表示如下的一个图有哪些方法呢,
import numpy as np
1.邻接矩阵
图的一种常见的表示方法就是邻接矩阵了,这种表示的主要不同之处在于,它不在列出每个节点的所有邻居节点,而是会将每个节点的可能的邻居位置排成一排 也就是一个数组,用于对应图的每一个节点,然后用某种值,如True或false来表示相关节点是否是当前节点的邻居。其最简单的形式也可用嵌套list来实现。
a,b,c,d,e,f,g,h=range(8)
N=[
[0,1,1,0,1,0,1,0,1],
[0,1,1,0,1,0,1,0,1],
[0,1,1,0,1,0,1,0,1],
[0,1,1,0,1,0,1,0,1],
[0,1,1,0,1,0,1,0,1],
[0,1,1,0,1,0,1,0,1],
[0,1,1,0,1,0,1,0,1],
[0,1,1,0,1,0,1,0,1]
]
#1.判断ab是否存在链接
is_conn=N[a][b]
#2.获取a有多少个相连接节点
nodes=np.sum(N[a])
#3.遍历所有节点
for i in N:
print(i)
#4.增加一个节点,较为麻烦,创建一列向量,vstack(N,x),然后遍历所有N[m][x],赋值
is_conn,nodes
[0, 1, 1, 0, 1, 0, 1, 0, 1]
[0, 1, 1, 0, 1, 0, 1, 0, 1]
[0, 1, 1, 0, 1, 0, 1, 0, 1]
[0, 1, 1, 0, 1, 0, 1, 0, 1]
[0, 1, 1, 0, 1, 0, 1, 0, 1]
[0, 1, 1, 0, 1, 0, 1, 0, 1]
[0, 1, 1, 0, 1, 0, 1, 0, 1]
[0, 1, 1, 0, 1, 0, 1, 0, 1]
(1, 5)
2.图的另一种表现方式:加权邻接字典
在加权邻接字典中,每个邻居节点会有一个键和一个额外的值,表示与邻居节点之间的权重(关联性)
a,b,c,d,e,f,g,h=range(8)
N=[
{b:2,c:3,d:4,e:5},
{b:2,c:3,d:4,e:5},
{b:2,c:3,d:4,e:5},
{b:2,c:3,d:4,e:5},
{b:2,c:3,d:4,e:5},
{b:2,c:3,d:4,e:5},
{b:2,c:3,d:4,e:5},
{b:2,c:3,d:4,e:5},
]
#在加权邻接字典中可以方便的实现:
#1.检查ab是否互为链接
is_conn=N[a][b]
#2.获取a共有多少邻接节点
lenn=len(N[a])
#3.遍历所有节点
for i in N:
print(i)
#4.增加一个节点,只需要在最后增加一个{},并且在有链接的地方赋值即可如:
x={a:2}
N.append(x)
N[a][9]=2
#5.可以方便的遍历a的临界邻居节点
for i in N[a]:
print(i)
is_conn,lenn,
{1: 2, 2: 3, 3: 4, 4: 5}
{1: 2, 2: 3, 3: 4, 4: 5}
{1: 2, 2: 3, 3: 4, 4: 5}
{1: 2, 2: 3, 3: 4, 4: 5}
{1: 2, 2: 3, 3: 4, 4: 5}
{1: 2, 2: 3, 3: 4, 4: 5}
{1: 2, 2: 3, 3: 4, 4: 5}
{1: 2, 2: 3, 3: 4, 4: 5}
1
2
3
4
9
(2, 4)
3.图的加权邻接字典,还可以用dict代替set或list
a,b,c,d,e,f,g,h=range(8)
N={
'a':set('bcdef'),
'b':set('bcdef'),
'c':set('bcdef'),
'd':set('bcdef'),
'e':set('bcdef'),
'f':set('bcdef'),
'g':set('bcdef'),
'h':set('bcdef'),
}
#同样具有以下几种有点
#1.获取ab是否互为节点
is_conn='b' in N['a']
#2.获取a共有几个邻接节点
lenn=len(N['a'])
#3.遍历所有节点
for i in N:
print(N[i])
#4.获取a中的所有邻接节点
for i in N['a']:
print(i)
#5.增加一个节点,只需要增加一个键值对,然后在有链接的地方增加一个i值
N['i']=set('abcd')
is_conn,lenn
{'d', 'f', 'c', 'e', 'b'}
{'d', 'f', 'c', 'e', 'b'}
{'d', 'f', 'c', 'e', 'b'}
{'d', 'f', 'c', 'e', 'b'}
{'d', 'f', 'c', 'e', 'b'}
{'d', 'f', 'c', 'e', 'b'}
{'d', 'f', 'c', 'e', 'b'}
{'d', 'f', 'c', 'e', 'b'}
d
f
c
e
b
(True, 5)
4.图也可以用邻接列表来表示
a,b,c,d,e,f,g,h=range(8)
N=[
[b,c,d,f,g],#a
[b,c,d,f,g],#b
[b,c,d,f,g],
[b,c,d,f,g],
[b,c,d,f,g],
[b,c,d,f,g],
[b,c,d,f,g],
[b,c,d,f,g],
]
#同样也可以方便的实现图的各种功能
5.图的邻接集表示法
a,b,c,d,e,f,g,h=range(8)
N=[
{b,c,e,d},#a
{b,c,e,d},#b
{b,c,e,d},#c
{b,c,e,d},#d
{b,c,e,d},#e
{b,c,e,d},#f
{b,c,e,d},#g
{b,c,e,d},#h
]