用python实现获得一个无向图的邻接表,并把邻接表存入字典
时间: 2023-11-05 13:12:47 浏览: 111
好的,下面是Python的代码实现:
```python
graph = {} # 存储邻接表的字典
# 定义一个函数,根据输入的边列表来生成邻接表
def build_adjacency_list(edges):
for edge in edges:
# 将边的两个顶点分别存入邻接表中
if edge[0] not in graph:
graph[edge[0]] = []
graph[edge[0]].append(edge[1])
if edge[1] not in graph:
graph[edge[1]] = []
graph[edge[1]].append(edge[0])
return graph
# 示例:输入边列表
edges = [(0, 1), (1, 2), (2, 3), (3, 0)]
# 生成邻接表
graph = build_adjacency_list(edges)
# 打印邻接表
print(graph)
```
输出结果为:
```
{0: [1, 3], 1: [0, 2], 2: [1, 3], 3: [2, 0]}
```
这个字典中,每个键表示一个顶点,对应的值则是与该顶点相邻的顶点列表。由于是无向图,因此每条边都需要在两个顶点的邻接表中都存储一遍。
相关问题
如何从文件中读取数据并用这些数据构建图
从文件中读取数据并用于构建图通常涉及以下步骤:
1. **选择文件格式**:首先确定文件的数据存储格式,常见的有CSV、JSON、XML等。文本文件(如CSV)适合结构化的数据,而JSON和XML则更适用于复杂的数据结构。
2. **加载数据**:
- 对于CSV:可以使用Python的pandas库`pd.read_csv()`函数,或者Java中的`BufferedReader`和`csv`包来读取。
- 对于JSON:可以用Python的`json`模块或Java的`JsonReader`,解析成JSON对象数组。
- 对于XML:可以使用`xml.etree.ElementTree` (Python) 或 `javax.xml.parsers` (Java) 来解析XML内容。
3. **解析数据**:
- 将读取到的数据转换成适合图形结构的数据模型。例如,如果数据代表节点和边的关系,可能需要将节点信息存入列表或字典中,将边的信息组织成边对(源节点,目标节点)。
4. **构建图**:
- 使用合适的图数据结构(如邻接矩阵、邻接表、无向图或有向图),根据数据创建节点和边。对于Python,可以使用`networkx`库,Java中有`Graph`或`JGraphT`等。
5. **显示或分析图**:
- 可能还需要对构建好的图进行可视化,比如使用`matplotlib`(Python)或`JUNG`(Java)绘制节点和边。
```python
# 示例(Python):
import pandas as pd
import networkx as nx
data = pd.read_csv('graph_data.csv') # 假设数据已经按逗号分隔
G = nx.Graph() # 创建无向图
G.add_nodes_from(data['nodes']) # 添加节点
G.add_edges_from([(row['node1'], row['node2']) for _, row in data.iterrows()]) # 添加边
nx.draw(G) # 显示图形
# Java示例(使用JGraphT):
import org.jgrapht.*;
import java.io.*;
FileInputStream fileIn = new FileInputStream("graph_data.txt");
Graph<String, DefaultEdge> graph = new SimpleGraph<>(DefaultEdge.class);
// 读取并解析边和节点...
```
阅读全文