题解 | #24点游戏算法#二维树层深度优先搜索

24点游戏算法

http://www.nowcoder.com/practice/fbc417f314f745b1978fc751a54ac8cb

import itertools
nums = [int(x) for x in input().split()]
 
operation_fist_list = ["+", "-", "*", "/"]
operation_sec_list = ["-", "/"]
def cal24(candidates):
    if len(candidates)==1:
        if candidates[0]==24:
            return True
        else:
            return False
     
    for i in range(len(candidates)):
        for j in range(i+1, len(candidates)):
            for operation in operation_fist_list:
                if operation=="/" and candidates[j]==0: return False
                result = eval("{}{}{}".format(candidates[i], operation, candidates[j]))
                if cal24([result]+candidates[:i]+candidates[i+1:j]+candidates[j+1:]):
                    return True
            for operation in operation_sec_list:
                if operation=="/" and candidates[i]==0: return False
                result = eval("{}{}{}".format(candidates[j], operation, candidates[i]))
                if cal24([result]+candidates[:i]+candidates[i+1:j]+candidates[j+1:]):
                    return True
    return False
 
if cal24(nums): print("true")
else: print("false")

二维树层遍历,深度优先搜索 此前的深度优先搜索每次只取一个数字,这次需要每次取出两个数字,使用两个for循环用于模拟每次取两个数字。 运算完的结果需要重新放回candidate中,此次candidates的传入使用了隐形回溯,此前一直没有意识到

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务