• 竞赛题笔记(二):剪邮票


    有12张连在一起的12生肖的邮票。

    现在你要从中剪下5张来,要求必须是连着的。

    请你计算,一共有多少种不同的剪取方法。

    用了奇怪的伪函数式编程把这道题做出来了,一开始深搜里嵌套了一个深搜,运算速度极其慢,最后用了官方库的排列组合才解决掉,有时间需要看一看官方库的全排列是怎么写的

    def is_connect(path):
        pathed=[]

        def dfs(p,path):
            nonlocal pathed
            for d in [(0,1),(1,0),(-1,0),(0,-1)]:
                npx=p[0]+d[0]
                npy=p[1]+d[1]
                if npx >=0 and npx<3 and npy>=0 and npy<4:
                    
                    if (npx,npy) in path:
                        if (npx,npy) not in pathed:
                            pathed.append((npx,npy))
                            dfs((npx,npy),path)
                                 
        for p in path:
            dfs(p,path)
            break
        
        if len(pathed)==len(path):
            return True
        else:
            return False
            
    import copy
    import itertools
    stamp=[[0,1,2,3],
           [4,5,6,7],
           [8,9,10,11]]

    last_path=[]
    nums=0

    #注意第一个for在外层
    position=[(x,y)for x in range(3for y in range(4)]

    for perm in itertools.combinations(range(12),5):
        #一维转二维
        elem_p=[(e//4,e%4for e in perm]
     
        if is_connect(elem_p):
            last_path.append(elem_p)
            nums+=1
            print(nums)
    可以直接留言交流问题或想法,每天都会看
  • 相关阅读:
    莫队专题
    AJAX XML 实例
    AJAX 简介
    AJAX 服务器响应
    AJAX 创建XMLHttpRequest 对象
    AJAX 教程
    AJAX 向服务器发送请求
    AJAX onreadystatechange 事件
    AJAX ASP/PHP 请求实例
    让卖场的死角“起死回生”
  • 原文地址:https://www.cnblogs.com/shitianfang/p/12405839.html
Copyright © 2020-2023  润新知