36.md 1.2 KB
Newer Older
W
init  
wizardforcel 已提交
1 2 3 4 5 6
# Python 图

> 原文: [https://pythonspot.com/python-graph/](https://pythonspot.com/python-graph/)

## 介绍

W
wizardforcel 已提交
7
数学和计算机科学中的图由节点组成,这些节点可以相互连接,也可以不相互连接。 节点之间的连接称为边。图可以是有向的(箭头)或无向的。 边可以表示距离或重量。
W
init  
wizardforcel 已提交
8

W
wizardforcel 已提交
9 10 11
![graph mathematics](img/eabd6215fba57ca6e4a5ab91823da3c2.jpg)

默认图(左),有向图(右)
W
init  
wizardforcel 已提交
12 13 14 15 16

Python 没有图数据类型。 要使用图,我们可以使用模块,也可以自己实现:

*   自己实现图

W
wizardforcel 已提交
17
*   `networkx`模块
W
init  
wizardforcel 已提交
18 19 20

## Python 中的图

W
wizardforcel 已提交
21
有向图可以定义为:
W
init  
wizardforcel 已提交
22 23 24 25 26 27 28 29 30 31 32 33 34

```py
#!/usr/bin/env python

graph = {'A': ['B', 'C'],
         'B': ['C', 'A'],
         'C': ['D'],
         'D': ['A']}

print(graph)

```

W
wizardforcel 已提交
35
## 使用`networkx`的图
W
init  
wizardforcel 已提交
36

W
wizardforcel 已提交
37
`networkx`软件模块支持创建,处理图。
W
init  
wizardforcel 已提交
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62

```py
#!/usr/bin/env python
import networkx as nx

G=nx.Graph()
G.add_node("A")
G.add_node("B")
G.add_node("C")
G.add_edge("A","B")
G.add_edge("B","C")
G.add_edge("C","A")

print("Nodes: " + str(G.nodes()))
print("Edges: " + str(G.edges()))

```

结果:

```py
Nodes: [A, C, B]
Edges: [(A, C), (A, B), (C, B)]

```