栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

蓝桥杯-方格分割-python

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

蓝桥杯-方格分割-python

题目描述

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

6x6的方格,沿着格子的边线剪开成两部分。 要求这两部分的形状完全相同。

如下就是三种可行的分割法。

试计算: 包括这 3 种分法在内,一共有多少种不同的分割方法。 注意:旋转对称的属于同一种分割法。

运行限制

最大运行时间:1s最大运行内存: 128M

思路:

1.分割线一定会经过中心点,故我们在使用dfs深度优先搜索时要从(3,3)开始搜索,如果搜索到边界就停止搜索,计数

2.只要确定半条线的走向,就能依照关于原点对称的原则就可以找到另外半条线,具体体现在我们的代码中就是在标记了当前走到的点时,也要标记和它关于中心点(3,3)对称的点

3.在向四个方向搜索时,如果判断到移动后的点超出边界,则不进行搜索,如果该点被标记搜索过,也不进入搜索

代码:

count=0
vis=[[1]*7 for i in range(7)]
dir=[(-1,0),(1,0),(0,-1),(0,1)]
def dfs(x,y):
    global count
    if x==0 or y==0 or x==6 or y==6:
        count+=1
        return
    vis[x][y],vis[6-x][6-y]=0,0
    for i in range(0,4):
        newx = x+dir[i][0]
        newy = y+dir[i][1]
        if newx<0 or newy<0 or newx>6 or newy>6:
            continue
        if vis[newx][newy]:
            dfs(newx,newy)
    vis[x][y],vis[6-x][6-y]=1,1

dfs(3,3)
print(count/4)
    

 感谢蓝桥杯及华东理工大学罗老师的教程!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/744835.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号