You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python随机图贪心着色适配问题:字典格式图传入时索引错误的解决求助

解决贪心着色脚本的索引越界问题

看起来你的问题根源在于随机图的节点是1-based(从1开始),但你的greedyColoring函数是按0-based(从0开始)的索引来初始化结果列表的,导致访问result[i]时超出了列表范围。

问题分析

你生成的随机图字典键是1,2,3,4,5,但调用greedyColoring(d, 5)时,函数内部应该是初始化了一个长度为5的result列表(索引范围0-4)。当循环处理节点5时,尝试访问result[5],这显然超出了列表的最大索引,直接触发IndexError。

两个可行的解决方案

方案1:将随机图改为0-based节点

这是最简单的调整,直接让图的节点索引和函数的结果列表索引对齐:

from random import sample, randrange

# 把节点列表改为0起始
q = [0, 1, 2, 3, 4]
# 生成0-based的随机图字典
random_graph = {i: sample([j for j in q if i != j], randrange(1, len(q)-1)) for i in q}

# 调用贪心着色函数(此时num_vertices=5,对应0-4的索引)
greedyColoring(random_graph, 5)

方案2:修改greedyColoring函数适配1-based节点

如果不想改动图的节点格式,可以调整函数内部的结果列表初始化和遍历逻辑,适配1-based的节点:

def greedyColoring(graph, num_vertices):
    # 初始化结果列表,长度设为num_vertices+1(索引0不用,1-num_vertices对应节点)
    result = [-1] * (num_vertices + 1)
    
    # 遍历图中的每一个节点(1到num_vertices)
    for node in graph.keys():
        # 收集相邻节点已使用的颜色
        used_colors = set()
        for neighbor in graph[node]:
            if result[neighbor] != -1:
                used_colors.add(result[neighbor])
        
        # 找到第一个可用的颜色(从0开始尝试)
        current_color = 0
        while current_color in used_colors:
            current_color += 1
        result[node] = current_color
    
    # 返回结果(如果不需要索引0,可以返回result[1:])
    return result

# 调用时保持原参数
greedyColoring(d, 5)

验证说明

调整后,无论是修改图的节点格式还是函数逻辑,都能让result的索引和图的节点一一对应,避免索引越界的问题,同时保证贪心着色算法正常运行。

内容的提问来源于stack exchange,提问作者Emilio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 09:32:38