11届国赛python试题 E: 玩具蛇

玩具蛇


【问题描述】
小蓝有一条玩具蛇,一共有 16 节,上面标着数字 1 至 16。每一节都是一个正方形的形状。相邻的两节可以成直线或者成 90 度角。
小蓝还有一个 4 × 4 的方格盒子,用于存放玩具蛇,盒子的方格上依次标着字母 A 到 P 共 16 个字母。小蓝可以折叠自己的玩具蛇放到盒子里面。他发现,有很多种方案可以将玩具蛇放进去。
下图给出了两种方案:
请帮小蓝计算一下,总共有多少种不同的方案。如果两个方案中,存在玩具蛇的某一节放在了盒子的不同格子里,则认为是不同的方案。
在这里插入图片描述
思路:
这到题的意思就是当起始点我0,0的时候如何可以从0,0走完15步,然后求出有多少种可能,我们求出0,0的可能时然后在遍历所有可能的起始点,再把步数相加就可以了。我们利用dfs的方法把起始点0,0的所以可能遍历一边然后在换起始点遍历就可以求出来了。
答案:552
程序:

nu=0
f=[[0,1],[1,0],[-1,0],[0,-1]]
def dfs(m,x,y):
    global nu
    if m==15:
        nu+=1
        return
    for i in f:
        if -1<x+i[0]<4 and -1<y+i[1]<4 and d[x+i[0]][y+i[1]]==0:
            d[x][y]=1
            dfs(m+1,x+i[0],y+i[1])
            d[x][y]=0
    
for i in range(4):
    for i1 in range(4):
        d=[[0 for i1 in range(4)]for i in range(4)]
        dfs(0,i,i1)
print(nu)

禁止转载。仅用于自己学习。对程序错误不负责。

猜你喜欢

转载自blog.csdn.net/weixin_46640345/article/details/112755656