蓝桥杯 玩具蛇 python组

题目描述

本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

小蓝有一条玩具蛇,一共有 16 节,上面标着数字 1 至 16。每一节都是一个正方形的形状。相邻的两节可以成直线或者成 90 度角。

小蓝还有一个 4×4 的方格盒子,用于存放玩具蛇,盒子的方格上依次标着字母 A 到 P 共 16 个字母。

小蓝可以折叠自己的玩具蛇放到盒子里面。他发现,有很多种方案可以将玩具蛇放进去。

下图给出了两种方案:

请帮小蓝计算一下,总共有多少种不同的方案。如果两个方案中,存在玩具蛇的某一节放在了盒子的不同格子里,则认为是不同的方案。

解答:我的想法是分两部分来写,第一部分遍历所有点作为玩具蛇的头部,然后带入第二部分函数体里,第二部分将每一步的方向均分为上下左右,然后确定终止条件:1是十六个点全部走遍,方案数加一,返回上一级;2是走的次数超过16个点,确定此时已经错误,返回上一级。然后输出所有的方案数即可。

def dfs(i,j,temp):

  global count,ans        #全局变量,count方案数会一直累加

  if temp > 16:        #行走的步数超过16,即代表该方案不能通过,返回即可,一般情况下不会出现,即进行容错处理

    return

  if temp == 16:        #行走的步数为16,符合条件,方案数加一,返回上一级

    count+=1

    return

  for x in range(4):        #此时节点的上下左右4个方向放置

    i_1 = i + dd[x][0]

    j_1 = j + dd[x][1]

    if i_1>=0 and i_1<=3 and j_1>=0 and j_1<=3 and ans[i_1][j_1]==0:

        #如果下标没有越界且该节点尚未走过,则走该节点

      ans[i_1][j_1]=1

      dfs(i_1,j_1,temp+1)

      ans[i_1][j_1]=0


 

count = 0

dd = [[0,1],[0,-1],[1,0],[-1,0]]        #上下左右行走的数组

for i in range(4):

  for j in range(4):

    ans = [[0 for x in range(4)] for y in range(4)]        #此时是把整个区间全部设为空值

    ans[i][j] = 1        #把头节点标记为已走过,0表示没有走过,1表示走过

    dfs(i,j,1)        #带入循环,遍历此时头节点所在位置的情况下所有符合条件的方案

print(count)                #输出所有的方案数

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

缱绻命运

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值