键盘输入以下结点数据:太原、成都、北京、上海、天津、大连、河北,建立一个有向图或无向图(自定)的邻接表并输出该邻接表
时间: 2023-09-19 12:06:10 浏览: 144
假设我们建立一个无向图,邻接表如下:
| 结点 | 相邻结点 |
| ---- | -------- |
| 太原 | 成都,北京 |
| 成都 | 太原,北京,上海 |
| 北京 | 太原,成都,上海,天津 |
| 上海 | 成都,北京,天津,大连 |
| 天津 | 北京,上海,大连 |
| 大连 | 上海,天津 |
| 河北 | 无相邻结点 |
代码实现如下:
```python
class GraphNode:
def __init__(self, val):
self.val = val
self.next = None
class Graph:
def __init__(self, nodes):
self.nodes = [GraphNode(node) for node in nodes]
self.adj_list = {node.val: None for node in self.nodes}
def add_edge(self, node1, node2):
index1 = self.nodes.index(GraphNode(node1))
index2 = self.nodes.index(GraphNode(node2))
node2 = GraphNode(node2)
# update node1's adjacency list
if not self.adj_list[node1]:
self.adj_list[node1] = node2
else:
curr_node = self.adj_list[node1]
while curr_node.next:
curr_node = curr_node.next
curr_node.next = node2
# update node2's adjacency list
node1 = GraphNode(node1)
if not self.adj_list[node2.val]:
self.adj_list[node2.val] = node1
else:
curr_node = self.adj_list[node2.val]
while curr_node.next:
curr_node = curr_node.next
curr_node.next = node1
def print_adj_list(self):
for node in self.nodes:
print(f'{node.val} -> ', end='')
curr_node = self.adj_list[node.val]
while curr_node:
print(f'{curr_node.val} -> ', end='')
curr_node = curr_node.next
print('None')
nodes = ['太原', '成都', '北京', '上海', '天津', '大连', '河北']
g = Graph(nodes)
g.add_edge('太原', '成都')
g.add_edge('太原', '北京')
g.add_edge('成都', '北京')
g.add_edge('成都', '上海')
g.add_edge('北京', '上海')
g.add_edge('北京', '天津')
g.add_edge('上海', '天津')
g.add_edge('上海', '大连')
g.add_edge('天津', '大连')
g.print_adj_list()
```
输出结果:
```
太原 -> 成都 -> 北京 -> None
成都 -> 太原 -> 北京 -> 上海 -> None
北京 -> 太原 -> 成都 -> 上海 -> 天津 -> None
上海 -> 成都 -> 北京 -> 天津 -> 大连 -> None
天津 -> 北京 -> 上海 -> 大连 -> None
大连 -> 上海 -> 天津 -> None
河北 -> None
```
阅读全文