键盘输入数据,建立一个有向图的领接表,输出该邻接表并计算各顶点的度
在启动正常运行的时候,系统不能复位。
在系统跑飞(程序异常执行)的情况,系统复位,程序重新执行。
我可以解决该问题。
首先,我们需要了解邻接表的数据结构。邻接表是一种存储有向图中各个顶点之间相互关系的数据结构,它是一个由结构体(或类)和指针构成的链表数组,其中每个结点的数据域用来存储每个顶点的度数,指针域则用来存储各个顶点的邻接点。因此,我们需要在构建邻接表的同时计算每个顶点的度数。
我们按照以下步骤来建立一个有向图的邻接表:
示例代码:
graph_data = {} while True: data = input("请输入有向图的数据(以空格分隔,以‘end’结束):") if data == 'end': break start, end = data.strip().split() if start not in graph_data: graph_data[start] = [end] else: graph_data[start].append(end) print(graph_data)
示例代码:
adj_list = {} in_degree = {} for node in graph_data: if node not in adj_list: adj_list[node] = [] in_degree[node] = 0 for neighbor in graph_data[node]: if neighbor not in adj_list: adj_list[neighbor] = [] in_degree[neighbor] = 1 else: in_degree[neighbor] += 1 adj_list[node].append(neighbor) print(adj_list) print(in_degree)
示例代码:
for node in adj_list: print(node, end=' -> ') for neighbor in adj_list[node]: print(neighbor, end=' ') print() print("每个顶点的度数为:") for node in in_degree: print(node, in_degree[node])
完整代码如下:
graph_data = {}
while True:
data = input("请输入有向图的数据(以空格分隔,以‘end’结束):")
if data == 'end':
break
start, end = data.strip().split()
if start not in graph_data:
graph_data[start] = [end]
else:
graph_data[start].append(end)
adj_list = {}
in_degree = {}
for node in graph_data:
if node not in adj_list:
adj_list[node] = []
in_degree[node] = 0
for neighbor in graph_data[node]:
if neighbor not in adj_list:
adj_list[neighbor] = []
in_degree[neighbor] = 1
else:
in_degree[neighbor] += 1
adj_list[node].append(neighbor)
print("输入的有向图的邻接表为:")
for node in adj_list:
print(node, end=' -> ')
for neighbor in adj_list[node]:
print(neighbor, end=' ')
print()
print("每个顶点的度数为:")
for node in in_degree:
print(node, in_degree[node])
建议优化: