JRM 是二维 list, best_RJM 总是返回循环最后一次生成的 new_RJM 而不是 best_cost 对应的 new_RJM. 这里的 list 需要怎么处理才能正确值呢?
def sls(RJM, n):
    initNode = Node(0, 0)
    initNode.distance = 0
    best_cost = ucs(RJM, initNode)
    # best_RJM = RJM
    for i in range(n):
        new_RJM = random_change(RJM,len(RJM))
        result = ucs(new_RJM, initNode)
        if best_cost < result:
            best_cost = result
            RJM = new_RJM
            best_RJM = new_RJM
        else:
            pass
    return best_RJM, best_cost
|      1jky      2015-10-07 03:51:42 +08:00 via Android  1 目测 best_RJM 和 new_RJM 都指向 RJM ,给 best_RJM 或 new_RJM 赋值的时候新建一个 list 应该就可以了 | 
|  |      2biggun      2015-10-07 04:10:48 +08:00  2 import copy RJM = copy.deepcopy(new_RJM) best_RJM = copy.deepcopy(new_RJM) 或者 RJM = new_RJM[:] best_RJM = new_RJM[:] python 里一般的 assignment 都是指向同一个 reference 。所以本质上 best_RJM, new_RJM 和 RJM 都是一个东西 | 
|  |      3lbfeng OP @jky 已改成 best_RJM = list(new_RJM) 结果居然没变,还是返回循环最后一次生成的 new_RJM 。 | 
|  |      4lbfeng OP |