python 无向图
时间: 2023-11-10 22:05:00 浏览: 100
要表示无向图,可以使用邻接表或邻接矩阵。其中邻接表是一个字典,键为节点,值为与该节点相邻的节点列表。邻接矩阵则是一个二维数组,其中第 i 行第 j 列的值表示节点 i 和节点 j 是否相邻。
示例代码:
```python
# 邻接表表示无向图
graph = {
1: [2, 3],
2: [1, 3, 4],
3: [1, 2, 4],
4: [2, 3]
}
# 邻接矩阵表示无向图
matrix = [
[0, 1, 1, 0],
[1, 0, 1, 1],
[1, 1, 0, 1],
[0, 1, 1, 0]
]
```
相关问题
python无向图最短路径
要找到python无向图中的最短路径,可以使用Dijkstra算法或Floyd算法。
Dijkstra算法用于找到从一个顶点到其他所有顶点的最短路径。它通过逐步确定从起始顶点到其他顶点的最短距离,并记录最短路径的前驱顶点。这个算法的时间复杂度为O(num_node**2),其中num_node是图中顶点的数量。
Floyd算法则可以找到图中任意两个顶点之间的最短路径。它通过动态规划的方式,逐步更新两个顶点之间的最短路径长度。这个算法的时间复杂度为O(num_node**3)。
选择使用哪个算法取决于具体的需求。如果只需要找到从一个顶点到其他所有顶点的最短路径,可以使用Dijkstra算法。如果需要找到任意两个顶点之间的最短路径,可以使用Floyd算法。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* [Python 图_系列之基于链接表>实现无向图最短路径搜索](https://blog.csdn.net/y6123236/article/details/123971104)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
- *3* [python 无向图最短路径之Dijkstra算法](https://blog.csdn.net/WYXHAHAHA123/article/details/89678253)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
python无向图可视化
### 推荐库
对于无向图的可视化,NetworkX 和 Pyvis 是两个非常出色的 Python 库。NetworkX 提供了强大的功能来创建、操作和研究复杂网络结构中的模式[^1]。而 Pyvis 则专注于交互式的图形展示,可以轻松生成 HTML 文件以便在网络浏览器中查看。
#### NetworkX 示例代码
下面是一个简单的例子,展示了如何利用 NetworkX 来绘制一个基本的无向图:
```python
import networkx as nx
import matplotlib.pyplot as plt
# 创建一个新的空图表对象
G = nx.Graph()
# 添加节点
nodes_list = ['A', 'B', 'C', 'D']
G.add_nodes_from(nodes_list)
# 定义边并加入到图中
edges_list = [('A','B'), ('B','C'), ('C','D'),('D','A')]
G.add_edges_from(edges_list)
# 绘制图像
plt.figure(figsize=(8,6))
nx.draw(G, with_labels=True, node_color='skyblue', edge_color='gray')
plt.show()
```
这段程序会构建一个由四个顶点组成的环形无向图,并通过 `matplotlib` 将其渲染出来。
#### Pyvis 示例代码
如果希望得到更具有互动性的结果,则可以选择使用 Pyvis:
```python
from pyvis.network import Network
net = Network(notebook=True)
for n in nodes_list:
net.add_node(n)
for e in edges_list:
net.add_edge(e[0],e[1])
net.toggle_physics(True)
net.show("example.html") # 打开默认网页浏览器显示图形
```
此段脚本同样建立了一个四节点的循环连接,但是它所产生的输出文件可以直接在任何现代Web浏览器上打开,并允许用户放大缩小以及拖拽节点位置等操作。
阅读全文