智慧魔珠金字塔(类似俄罗斯方块)的所有情况 python
一. 首先呢,我们介绍一下这东西:
名称: 智慧魔珠金字塔
规则:应该有些人玩过了
二. python实现:
说一下主要的算法,我们先初始化一个chessboard(类似一个等腰直角三角形):
chessboard = [[0]*i for i in range(10, 0, -1)]
然后再模拟棋子——通过打表,这里我们把棋子放进一个矩形里,以左下角为基准,算出每个点的相对位置
如A号棋子(见上方)的一种情况我们可以表示为[[0,0],[0,1],[1,1],[2,1]](第一个为行,第二个为列)
通过计算共有60种情况(包括旋转,对称),12颗棋子
然后进行枚举对左下角的那个点进行枚举,并判断是否能放(这里可能会超出列表范围),如果可以,则枚举下一刻;如果不行则继续枚举这颗;直至12颗棋子枚举完
下面附上代码:
from time import time
def dfs(n_1):global ans, chessboard, time_startflag, a, u_2, u_1 = True, [] ,0 ,0for i in range(9,-1,-1):#每行的个数for j in range(i):#每一行挨个逐次搜索for s in range(len(biao[n_1])):#旋转对称if pd(9-i,j,n_1,s):flag,u_1 = False,u_1+1if n_1 < 11:if dfs(n_1+1):for o in range(len(biao[n_1][s])):chessboard[9-i + biao[n_1][s][o][0]][j + biao[n_1][s][o][1]] = 0u_2 += 1else:time_end = time()ans += 1print('第'+str(time_end-time_start)+'秒算出:'+'第'+str(ans)+'个答案如下:')for a in range(10):print(chessboard[a])for o in range(len(biao[n_1][s])):chessboard[9 - i + biao[n_1][s][o][0]][j + biao[n_1][s][o][1]] = 0return Trueif u_1 == u_2:return Trueif flag:return Truedef jianzhi():for i in range(9,-1,-1):for j in range(i):if chessboard[9-i][j] == 0:h = 1for o in range(4):i_1,j_1 = 9-i,jwhile 0<=i_1+go[o][0]<=9-j_1 and 0<=j_1+go[o][1]<=9-i_1:i_1,j_1=i_1+go[o][0],j_1+go[o][1]if chessboard[i_1][j_1] == 0:h += 1else:breakif h<3:return Falsereturn Truedef pd(x, y, i, j):for s in range(len(biao[i][j])):if x + biao[i][j][s][0] <= chessboardgeshu[y + biao[i][j][s][1]] and\y + biao[i][j][s][1] <= chessboardgeshu[x + biao[i][j][s][0]]:if chessboard[x + biao[i][j][s][0]][y + biao[i][j][s][1]] != 0:return Falseelse:return Falsefor s in range(len(biao[i][j])):chessboard[x + biao[i][j][s][0]][y + biao[i][j][s][1]] = i + 1if jianzhi():return Trueelse:for s in range(len(biao[i][j])):chessboard[x + biao[i][j][s][0]][y + biao[i][j][s][1]] = 0return Falseif __name__ == '__main__':time_start = time()j, i, a, h, chessboard, ans = 0, 0, [], 0, [], 0go = [[0,1],[1,0],[0,-1],[-1,0]]for i in range(10,0,-1):for j in range(i):a.append(0)chessboard.append(a)a = []#初始化表格for i in range(10):print(chessboard[i])chessboardgeshu = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0, -1, -1, -1, -1]biao =[[[[0, 1], [1, 0], [1, 1], [2, 0], [2, 1]],[[0, 0], [0, 1], [1, 0], [1, 1], [2, 1]],[[0, 0], [0, 1], [1, 0], [1, 1], [2, 0]],[[0, 0], [1, 0], [1, 1], [2, 0], [2, 1]],[[0, 0], [0, 1], [1, 1], [0, 2], [1, 2]],[[1, 0], [0, 1], [1, 1], [0, 2], [1, 2]],[[0, 0], [1, 0], [0, 1], [1, 1], [0, 2]],[[0, 0], [1, 0], [0, 1], [1, 1], [1, 2]]],[[[2, 0], [2, 1], [1, 1], [1, 2], [0, 2]],[[0, 0], [1, 0], [1, 1], [2, 1], [2, 2]],[[0, 0], [0, 1], [1, 1], [1, 2], [2, 2]],[[2, 0], [1, 0], [1, 1], [0, 1], [0, 2]]],[[[0, 0], [1, 0], [0, 1], [0, 2], [1, 2]],[[0, 0], [1, 0], [1, 1], [1, 2], [0, 2]],[[0, 0], [1, 0], [2, 0], [2, 1], [0, 1]],[[0, 0], [0, 1], [1, 1], [2, 1], [2, 0]]],[[[1, 0], [1, 1], [0, 1], [1, 2], [2, 1]]],[[[0, 1], [1, 1], [2, 1], [3, 1], [3, 0]],[[0, 0], [1, 0], [2, 0], [3, 0], [3, 1]],[[0, 0], [0, 1], [1, 0], [2, 0], [3, 0]],[[0, 0], [0, 1], [1, 1], [2, 1], [3, 1]],[[0, 0], [1, 0], [0, 1], [0, 2], [0, 3]],[[0, 0], [1, 0], [1, 1], [1, 2], [1, 3]],[[0, 0], [1, 3], [0, 1], [0, 2], [0, 3]],[[0, 3], [1, 0], [1, 1], [1, 2], [1, 3]]],[[[0, 0], [1, 0], [1, 1], [0, 1]]],[[[0, 0], [1, 0], [2, 0], [3, 0]],[[0, 0], [0, 1], [0, 2], [0, 3]]],[[[0, 0], [1, 0], [2, 0], [3, 0], [2, 1]],[[0, 0], [1, 0], [2, 0], [3, 0], [1, 1]],[[0, 1], [1, 1], [2, 0], [2, 1], [3, 1]],[[0, 1], [1, 1], [1, 0], [2, 1], [3, 1]],[[0, 0], [0, 1], [0, 2], [0, 3], [1, 1]],[[0, 0], [0, 1], [0, 2], [0, 3], [1, 2]],[[1, 0], [1, 1], [1, 2], [1, 3], [0, 1]],[[1, 0], [1, 1], [1, 2], [1, 3], [0, 2]]],[[[0, 1], [1, 1], [2, 1], [2, 0]],[[0, 1], [1, 1], [2, 1], [0, 0]],[[0, 0], [1, 0], [2, 0], [2, 1]],[[0, 0], [1, 0], [2, 0], [0, 1]],[[0, 0], [0, 1], [0, 2], [1, 2]],[[0, 0], [0, 1], [0, 2], [1, 0]],[[1, 0], [1, 1], [1, 2], [0, 0]],[[1, 0], [1, 1], [1, 2], [0, 2]]],[[[2, 0], [2, 1], [2, 2], [1, 2], [0, 2]],[[0, 0], [1, 0], [2, 0], [2, 1], [2, 2]],[[0, 0], [1, 0], [2, 0], [0, 1], [0, 2]],[[0, 0], [0, 1], [0, 2], [1, 2], [2, 2]]],[[[1, 0], [1, 1], [0, 1], [0, 2], [0, 3]],[[0, 0], [0, 1], [1, 1], [1, 2], [1, 3]],[[1, 0], [1, 1], [1, 2], [0, 2], [0, 3]],[[0, 0], [0, 1], [0, 2], [1, 2], [1, 3]],[[3, 0], [2, 0], [1, 0], [1, 1], [0, 1]],[[0, 0], [1, 0], [2, 0], [2, 1], [3, 1]],[[0, 0], [1, 0], [1, 1], [2, 1], [3, 1]],[[3, 0], [2, 0], [2, 1], [1, 1], [0, 1]]],[[[1, 0], [0, 0], [0, 1]],[[0, 0], [0, 1], [1, 1]],[[0, 0], [1, 1], [1, 0]],[[0, 1], [1, 1], [1, 0]]]]#初始化每个棋子的形状dfs(0)#进行深搜print(ans,'完成')
如有大佬有更好的算法可以在评论区写
智慧魔珠金字塔(类似俄罗斯方块)的所有情况 python相关推荐
- 【企业数字化转型】DIKW:数据、信息、知识、智慧的金字塔层次模型
摘要:这两年企业数字化转型很热门,工业领域推出了工业4.0的说法,零售业领域出了"新零售",生活领域各种智能家居.物联网设备的应用场景也层出不穷. 归根结底,这些都和数字化转型的这 ...
- python中类似对象吗_在Python中,两个对象什么时候相同? - python
似乎2 is 2和3 is 3在python中始终为true,通常,对整数的任何引用都与对相同整数的任何其他引用相同. None(即None is None)也是如此.我知道用户定义类型或可变类型不会 ...
- 旋转行求解联立方程(针对特殊情况).(python,数值分析)
第六课 旋转行求解联立方程 在使用传统的高斯消元法或[L][U]因子分解法(程序2.2)求解非对称方程时,我们回避了系数矩阵的一个主对角分量应该从零开始还是在求解过程中变为零的问题.在下一个程序中,我 ...
- 根据股票当日涨幅和换手率预测其下一交易日的涨跌情况[Python实现]
前些天在某网站看到了一个比较有意思的股票交易策略,即在尾盘[02:30~03:00]挑选出当日换手率3%~5%,涨幅5%左右的股票买入,下一交易日伺机卖出.因为股票涨跌存在一定的延续性,个人感觉该策略 ...
- 类似pyinstaller_全网首份Python打包工具Pyinstaller实战指南,如丝滑般体验
写了个吊炸天的Python项目,把我和左手相处的时间都赔上了.但出于版权考虑,我不太想让使用方直接用我的代码,毕竟Python代码给出去,就真的收不回来了.学习Python中有不明白推荐加入交流群 号 ...
- python的语法类似php吗_php与python一样吗
php和python是不一样的,两种语言有相似的地方,也有区别. PHP即"超文本预处理器",是一种通用开源脚本语言.PHP是在服务器端执行的脚本语言,与C语言类似,是常用的网站编 ...
- YTU 1495 蛇行矩阵 YTU 1607 字符棱形YTU 1959 图案打印YTU 2016 打印金字塔
YTU1495: 蛇行矩阵 题目描述: Time Limit: 1 Sec Memory Limit: 64 MB 蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形. Input 本题有多组数 ...
- 基于智慧教室|无纸化会议的新选择:RTMP解决方案
基于智慧教室或是会议的技术方案,一般主要是涉及到屏幕采集和推送,整体技术方案这块,一般建议走RTMP,说到这里,好人开发者提到,市面上也有RTSP的技术方案,甚至RTSP组播方案,这块,大牛直播SDK ...
- ArcGIS中栅格数据的金字塔详解
1 栅格金字塔定义 金字塔可用于改善性能.它们是原始栅格数据集的缩减采样版本,可包含多个缩减采样图层.金字塔的各个连续图层均以 2:1 的比例进行缩减采样.以下是为栅格数据集创建的两级金字塔示例: 图 ...
最新文章
- Python 之vim编写python自动补全
- 山西DOT NET俱乐部
- (7) ebj学习: jpa 一对一,一对多,多对多
- 一生只有43年,喜欢泡妹打架,却凭借一篇文章震惊世界,跻身一流数学家
- 为什么使用HashMap需要重写hashcode和equals方法_不同时重写equals和hashCode又会怎样?听听过来人的经验...
- KD-VLP:知识蒸馏和预训练还能这么结合?上科大IntelMSRA提出基于知识蒸馏的端到端多模态预训练模型...
- Windows下Git的下载与安装
- 做游戏,学编程(C语言) 3 利用函数对飞机游戏进行重构
- 带有分页的列表的跳转后,返回时怎么实现保留分页的页数等信息
- ExtJS学习之window
- 分享24个JS特效广告和66个JS特效在线客服J代码JS代码
- JSbridge原理与实现简析
- [NOI2015]小园丁与老司机
- PowerBuilder打印QRCode
- Java:面向Web和移动应用的Java开发的增长
- linux之ssh命令
- 20201125今日学习
- 商城后台管理React+Springboot
- java for row_Java Row.getRowNum方法代码示例
- 滴水逆向第二集-作业