任务描述 给定一个无向图,在此无向图中删除一条边。 编程要求 输入 多组数据,每组m+2行。第一行有两个数字n和m,代表有n个顶点和m条边。顶点编号为1到n。第二行到第m+1行每行有两个数字h和k,代表边依附的两个顶点。第m+2行有两个数字f和g,代表删除的边所依附的两个顶点。当n和m都等于0时,输入结束。 输出 每组数据输出n行。为删除边后的邻接表。每两个数字之间用空格隔开。 测试说明 平台会对你编写的代码进行测试: 测试输入: 3 2 1 2 2 3 3 2 3 1 1 2 1 2 0 0 预期输出: 1 2 2 1 3 1 2 3
时间: 2024-03-05 15:52:55 浏览: 58
好的,这是一道比较典型的图论问题,我可以为您提供代码实现,您可以参考一下:
```python
def remove_edge(n, m, edges, f, g):
# 构建邻接表
graph = [[] for _ in range(n + 1)]
for h, k in edges:
graph[h].append(k)
graph[k].append(h)
# 删除指定边
graph[f].remove(g)
graph[g].remove(f)
# 输出邻接表
for i in range(1, n + 1):
print(' '.join(map(str, graph[i])))
while True:
n, m = map(int, input().split())
if n == 0 and m == 0:
break
edges = []
for i in range(m):
h, k = map(int, input().split())
edges.append((h, k))
f, g = map(int, input().split())
remove_edge(n, m, edges, f, g)
```
这段代码中,我们首先通过输入构建邻接表,然后删除指定边,最后输出邻接表即可。注意,本题输入多组数据,因此需要在外层加一个循环,直到输入 n 和 m 都为 0 时结束。
阅读全文