编写程序,设计带权图的邻接矩阵与邻接表的创建和输出运算,主要完成以下功能: (1)建立如图的邻接矩阵,并输出它;(2)建立如图的邻接表,并输出它;(3) 输出每个顶点的入度和出度(4)销毁图G的邻接表
时间: 2024-12-28 16:35:29 浏览: 12
在编写程序处理带权图(Weighted Graph)时,邻接矩阵和邻接表是两种常见的数据结构。
**邻接矩阵**是一个二维数组,其中行代表源顶点,列表示目标顶点。值表示两个顶点之间的边的权重。例如,如果矩阵中的元素 `matrix[i][j]` 非零,说明节点 i 和节点 j 之间有边,权重就是该位置的数值。创建邻接矩阵的过程如下:
```python
def create_adj_matrix(graph):
matrix = [[0 for _ in range(len(graph))] for _ in range(len(graph))]
for u, edges in graph.items():
for v, weight in edges.items():
matrix[u][v] = weight
return matrix
# 示例图:
graph = {
'A': {'B': 5, 'D': 3},
'B': {'A': 5, 'C': 2},
'C': {'B': 2, 'D': 1},
'D': {'A': 3, 'C': 1}
}
adj_matrix = create_adj_matrix(graph)
print("邻接矩阵:")
for row in adj_matrix:
print(row)
```
**邻接表**是一种链式存储结构,将每个顶点作为头结点,包含指向其邻居以及它们权重的链接。创建邻接表:
```python
class Edge:
def __init__(self, destination, weight=0):
self.destination = destination
self.weight = weight
class AdjacencyList:
def __init__(self):
self.graph = {}
def add_edge(self, source, destination, weight=0):
if source not in self.graph:
self.graph[source] = []
edge = Edge(destination, weight)
self.graph[source].append(edge)
adj_list = AdjacencyList()
# ...继续添加图的边...
print("邻接表:")
for node, edges in adj_list.graph.items():
print(f"{node}: {edges}")
```
**计算顶点的入度和出度**:
遍历邻接矩阵或邻接表,对于矩阵,入度和出度直接对应矩阵行和列;对于表,则需要分别跟踪每个节点的出边数和入边数。
**销毁图的邻接表**:
在Python中,由于邻接表是动态数据结构,没有特定的“销毁”操作。如果你不再需要这个邻接表,可以将其变量设置为 None 或者删除所有引用。例如:
```python
del adj_list # 销毁邻接表
```
阅读全文