数据结构(Python) 设有一有向图G,其顶点值为字符型并假设各值互不相等,要求采用邻接表表示法存储。设计一个算法,存储该有向图并输出邻接表。 输入格式: 有多组测试数据,每组数据请依次输入图中各顶点的值,每个顶点值以回车间隔,并以#作为输入结束符;再请依次输入图中每条边的两个顶点值,两个顶点值以空格作为间隔,每输入一组后进行换行,最终以#结束输入。 输出格式: 输出该图中所有顶点值及其出边信息(边值按从小到大),具体格式见样例。 输入样例: 在这里给出一组输入。例如: A B C D # C D B D A D A C A B # 输出样例: 在这里给出相应的输出。例如: A->1->2->3 B->3 C->3 D
时间: 2023-12-14 22:37:57 浏览: 61
这是一个经典的图的邻接表存储问题,可以使用Python中的字典来实现。具体步骤如下:
1. 输入顶点值,以#作为输入结束符,将其存储到一个列表中。
2. 创建一个空字典,用于存储邻接表。字典的键为顶点值,值为一个链表,用于存储该顶点的出边信息。
3. 输入边的信息,将其存储到邻接表中。对于每一条边,将其起点对应的链表中添加一个元素,该元素为边的终点。
4. 输出邻接表。遍历字典,对于每个键值对,输出该顶点的值和其对应的链表中存储的出边信息。
下面是Python代码实现:
```python
while True:
# 输入顶点值
vertex_list = []
while True:
v = input()
if v == '#':
break
vertex_list.append(v)
# 边的信息
edges = []
while True:
line = input()
if line == '#':
break
edges.append(line.split())
# 创建邻接表
adj_list = {}
for v in vertex_list:
adj_list[v] = []
for edge in edges:
start, end = edge[0], edge[1]
adj_list[start].append(end)
# 输出邻接表
for v in sorted(adj_list.keys()):
print(v, end='->')
for end in sorted(adj_list[v]):
print(vertex_list.index(end) + 1, end='->')
print()
```
输入样例:
```
A
B
C
D
#
C D
B D
A D
A C
A B
#
```
输出样例:
```
A->2->3->4
B->4
C->2->4
D->1->3->4
```
阅读全文