如何为基于邻接表的无向图生成函数添加顶点数控制参数?
解决顶点数量控制的修改方案
直接给你修改后的代码,核心是新增num_vertices参数来独立控制顶点数量,同时调整原参数的作用,修复了原代码里的一些逻辑问题:
import random def graph(num_vertices, num_edges, weight, oriented): list_adj = [[] for _ in range(num_vertices)] list_w = [] edge_count = 0 if not oriented: # 循环生成指定数量的有效无向边 while edge_count < num_edges: i = random.randint(0, num_vertices - 1) k = random.randint(0, num_vertices - 1) # 排除自环和已存在的边 if i != k and k not in list_adj[i]: list_adj[i].append(k) list_adj[k].append(i) edge_count += 1 # 添加对应权重 list_w.append(random.randint(1, 10) if weight else 1) print("无向图邻接表: ", list_adj) print("边权重列表: ", list_w) print("生成的边数: ", edge_count) return list_adj, list_w # 示例调用:生成15个顶点、8条无向无权边的图 graph(15, 8, False, False)
修改说明
- 新增
num_vertices参数:直接指定图的顶点总数,邻接表的长度由该参数决定,实现顶点数量自主控制 - 重命名原
length为num_edges:明确该参数用来控制要生成的边数量,用while循环替代原for循环,确保能生成指定数量的有效边(原逻辑可能因自环/重复边导致实际边数不足) - 移除全局变量:把
list_adj和list_w移到函数内部,避免多次调用时数据残留 - 修正打印错误:原代码误将边数标注为顶点数,现在纠正为边数统计
内容的提问来源于stack exchange,提问作者Chems
相关产品推荐
相关产品推荐

