python复原魔方

1、安装库

一、Windows系统

①按Windows键(键盘左下角小窗户)+R键,输入cmd。

 ②输入

pip install PyQt5

 ③输入

pip install opencv-python

 

二、Mac系统

①按command+空格键,输入终端。

②输入

sudo easy_install pip

接着根据终端提示输入密码。

③同Windows系统相同

2、代码

一、导入库

import PyQt5.QtWidgets as QtWidgets
import PyQt5.QtGui as QtGui
import PyQt5.QtCore as QtCore
from PyQt5 import *
import numpy as np
import threading
import math
import cv2
import copy as cp
import time

二、初始化

file=""face=["U","D","L","R","F","B"]
color_name=["Y","W","O","R","B","G"]
color0=[(253,200,60),(246,246,246),(220,90,70),(255,0,0),(0,67,188),(0,220,150)]
color=[]
for x in color0:color.append((x[2],x[1],x[0]))

 三、用来复原的函数

class MF:def __init__(self):self.data={}for i,x in enumerate(face):self.data[x]=np.ones([3,3])*iclass Example(QWidget):def __init__(self):super(Example, self).__init__()self.cnt=0self.initUI()def initUI(self):w, h = 800, 600screen = QtWidgets.QDesktopWidget().screenGeometry()self.setGeometry((screen.width() - w) // 2, (screen.height() - h) // 2, w, h)self.setWindowTitle("三阶魔方")self.ops=["F","R","U","B","L","D"]self.textEdit = QtWidgets.QTextEdit(self)self.textEdit.setGeometry(580, 50, 180, 30)# self.textEdit.setStyleSheet("color:red")font = QtGui.QFont()font.setFamily('宋体')font.setBold(True)font.setPointSize(12)font.setWeight(75)self.textEdit.setFont(font)btn_run=QPushButton("执行公式",self)btn_run.setGeometry(580,10,100,30)btn_run.clicked.connect(self.connect_run)btn_solve=QPushButton("求解魔方",self)btn_solve.setGeometry(30,20,60,30)btn_solve.clicked.connect(self.connect_solve)btn_F=QPushButton("F",self)btn_F.setGeometry(120,10,40,30)btn_F.clicked.connect(self.connect_F)btn_R=QPushButton("R",self)btn_R.setGeometry(180,10,40,30)btn_R.clicked.connect(self.connect_R)btn_U=QPushButton("U",self)btn_U.setGeometry(240,10,40,30)btn_U.clicked.connect(self.connect_U)btn_B=QPushButton("B",self)btn_B.setGeometry(300,10,40,30)btn_B.clicked.connect(self.connect_B)btn_L=QPushButton("L",self)btn_L.setGeometry(360,10,40,30)btn_L.clicked.connect(self.connect_L)btn_D=QPushButton("D",self)btn_D.setGeometry(420,10,40,30)btn_D.clicked.connect(self.connect_D)btn_M=QPushButton("M",self)btn_M.setGeometry(480,10,40,30)btn_M.clicked.connect(self.connect_M)btn_f=QPushButton("F'",self)btn_f.setGeometry(120,50,40,30)btn_f.clicked.connect(self.connect_f)btn_r=QPushButton("R'",self)btn_r.setGeometry(180,50,40,30)btn_r.clicked.connect(self.connect_r)btn_u=QPushButton("U'",self)btn_u.setGeometry(240,50,40,30)btn_u.clicked.connect(self.connect_u)btn_b=QPushButton("B'",self)btn_b.setGeometry(300,50,40,30)btn_b.clicked.connect(self.connect_b)btn_l=QPushButton("L'",self)btn_l.setGeometry(360,50,40,30)btn_l.clicked.connect(self.connect_l)btn_d=QPushButton("D'",self)btn_d.setGeometry(420,50,40,30)btn_d.clicked.connect(self.connect_d)btn_m=QPushButton("M'",self)btn_m.setGeometry(480,50,40,30)btn_m.clicked.connect(self.connect_m)def connect_solve(self):global OPPSOPPS=""solve(mf.data)self.update()print(OPPS)def connect_F(self):move(mf.data,"F")self.update()def connect_R(self):move(mf.data,"R")self.update()def connect_U(self):move(mf.data,"U")self.update()def connect_B(self):move(mf.data,"B")self.update()def connect_L(self):move(mf.data,"L")self.update()def connect_D(self):move(mf.data,"D")self.update()def connect_M(self):move(mf.data,"M")self.update()def connect_f(self):move(mf.data,"f")self.update()def connect_r(self):move(mf.data,"r")self.update()def connect_u(self):move(mf.data,"u")self.update()def connect_b(self):move(mf.data,"b")self.update()def connect_l(self):move(mf.data,"l")self.update()def connect_d(self):move(mf.data,"d")self.update()def connect_m(self):move(mf.data,"m")self.update()def connect_run(self):tmp=self.textEdit.toPlainText()for op in tmp:move(mf.data,op)self.update()# time.sleep(1)def paintEvent(self, event):painter = QPainter()painter.begin(self)pen = QPen(QColor(255,0,255), 2, Qt.SolidLine)painter.setPen(pen)bgi=np.zeros([900,900,3])*255min_x=200max_x=500f_lu=min_xf_rd=min_x+(max_x-min_x)/3x=[f_lu,f_rd,f_rd,f_lu]y=[f_lu,f_lu,f_rd,f_rd]for i in range(3):for j in range(3):arr=[]for k in range(4):arr.append([x[k]+(max_x-min_x+20)*i/3,y[k]+(max_x-min_x+20)*j/3])arr=np.array(arr,dtype=np.int32)arr=np.reshape(arr,[-1,1,2])cv2.fillPoly(bgi,[arr],color[int(mf.data["F"][j,i])])x=[260,360,340,240]y=[100,100,130,130]for i in range(3):for j in range(3):# arr=[[x[0]+100*i,y[0]+35*j],[x[1]+100*i,y[1]+35*j],[x[2]+100*i,y[2]+35*j],[x[3]+100*i,y[3]+35*j]]arr=[]for k in range(4):arr.append([x[k]+106*i-20*j,y[k]+34*j-5])arr=np.array(arr,dtype=np.int32)arr=np.reshape(arr,[-1,1,2])cv2.fillPoly(bgi,[arr],color[int(mf.data["U"][j,i])])x=[500,514,514,500]y=[200,166+9,266+9,300]for i in range(3):for j in range(3):# arr=[[x[0]+100*i,y[0]+35*j],[x[1]+100*i,y[1]+35*j],[x[2]+100*i,y[2]+35*j],[x[3]+100*i,y[3]+35*j]]arr=[]for k in range(4):arr.append([x[k]+20*i+18,y[k]+110*j-34*i-6])arr=np.array(arr,dtype=np.int32)arr=np.reshape(arr,[-1,1,2])cv2.fillPoly(bgi,[arr],color[int(mf.data["R"][j,i])])  ############Lcnti=0for i in range(600-5,630-5,10):cntj=0for j in range(300,330,10):cv2.rectangle(bgi,(i,j),(i+8,j+8),color[int(mf.data["L"][cntj,cnti])],thickness=-1)cntj+=1cnti+=1############Ucnti=0for i in range(630,660,10):cntj=0for j in range(270-5,300-5,10):cv2.rectangle(bgi,(i,j),(i+8,j+8),color[int(mf.data["U"][cntj,cnti])],thickness=-1)cntj+=1cnti+=1############Fcnti=0for i in range(630,660,10):cntj=0for j in range(300,330,10):cv2.rectangle(bgi,(i,j),(i+8,j+8),color[int(mf.data["F"][cntj,cnti])],thickness=-1)cntj+=1cnti+=1############Dcnti=0for i in range(630,660,10):cntj=0for j in range(330+5,360+5,10):cv2.rectangle(bgi,(i,j),(i+8,j+8),color[int(mf.data["D"][cntj,cnti])],thickness=-1)cntj+=1cnti+=1############Rcnti=0for i in range(660+5,690+5,10):cntj=0for j in range(300,330,10):cv2.rectangle(bgi,(i,j),(i+8,j+8),color[int(mf.data["R"][cntj,cnti])],thickness=-1)cntj+=1cnti+=1############Bcnti=0for i in range(690+10,720+10,10):cntj=0for j in range(300,330,10):cv2.rectangle(bgi,(i,j),(i+8,j+8),color[int(mf.data["B"][cntj,cnti])],thickness=-1)# cv2.putText(bgi,str(cnti)+""+str(cntj),(i-650+cnti*40,j+60*cntj),cv2.FONT_HERSHEY_COMPLEX,1,(0,0,255),1)cntj+=1cnti+=1cv2.imwrite("D:/bgi_mf.jpg",bgi) self.cnt+=1#cv2.imwrite("D:/"+str(self.cnt)+".jpg",bgi)if True:file="D:/bgi_mf.jpg"pixmap = QPixmap(file)temp = cv2.imread(file)self.imgShape=[temp.shape[0], temp.shape[1]]painter.drawPixmap(QRect(0, 0, temp.shape[0], temp.shape[1]), pixmap)painter.end()def event2point(self,event):return [event.pos().x(),event.pos().y()]def mousePressEvent(self, event):self.update()def mouseMoveEvent(self, event):self.update()def mouseReleaseEvent(self, event):self.update()STEP=0
OPPS=""
def move(data,op):global STEP,OPPSSTEP+=1OPPS+=opdef cw(data):tmp=cp.deepcopy(data)tmp[0,0]=data[2,0]tmp[2,0]=data[2,2]tmp[2,2]=data[0,2]tmp[0,2]=data[0,0]tmp[0,1]=data[1,0]tmp[1,0]=data[2,1]tmp[2,1]=data[1,2]tmp[1,2]=data[0,1]return tmpdef anti_cw(data):tmp=cp.deepcopy(data)tmp[2,0]=data[0,0]tmp[2,2]=data[2,0]tmp[0,2]=data[2,2]tmp[0,0]=data[0,2]tmp[1,0]=data[0,1]tmp[2,1]=data[1,0]tmp[1,2]=data[2,1]tmp[0,1]=data[1,2]return tmptmp=cp.deepcopy(data)if op=="F":tmp["R"][:,0]=data["U"][2,:]tmp["D"][0,:]=data["R"][::-1,0]tmp["L"][:,2]=data["D"][0,:]tmp["U"][2,:]=data["L"][::-1,2]tmp["F"][:,:]=cw(data["F"])elif op=="R":tmp["B"][:,0]=data["U"][::-1,2]tmp["D"][:,2]=data["B"][::-1,0]tmp["F"][:,2]=data["D"][:,2]tmp["U"][:,2]=data["F"][:,2]tmp["R"][:,:]=cw(data["R"])elif op=="U":tmp["F"][0,:]=data["R"][0,:]tmp["L"][0,:]=data["F"][0,:]tmp["B"][0,:]=data["L"][0,:]tmp["R"][0,:]=data["B"][0,:]tmp["U"][:,:]=cw(data["U"])elif op=="B":tmp["U"][0,:]=data["R"][:,2]tmp["L"][:,0]=data["U"][0,::-1]tmp["D"][2,:]=data["L"][:,0]tmp["R"][:,2]=data["D"][2,::-1]tmp["B"][:,:]=cw(data["B"])elif op=="L":tmp["U"][:,0]=data["B"][::-1,2]tmp["F"][:,0]=data["U"][:,0]tmp["D"][:,0]=data["F"][:,0]tmp["B"][:,2]=data["D"][::-1,0]tmp["L"][:,:]=cw(data["L"])elif op=="D":tmp["F"][2,:]=data["L"][2,:]tmp["R"][2,:]=data["F"][2,:]tmp["B"][2,:]=data["R"][2,:]tmp["L"][2,:]=data["B"][2,:]tmp["D"][:,:]=cw(data["D"])elif op=="M":tmp["F"][1,:]=data["L"][1,:]tmp["R"][1,:]=data["F"][1,:]tmp["B"][1,:]=data["R"][1,:]tmp["L"][1,:]=data["B"][1,:]#####################################elif op=="f":tmp["U"][2,:]=data["R"][:,0]tmp["R"][:,0]=data["D"][0,::-1]tmp["D"][0,:]=data["L"][:,2]tmp["L"][:,2]=data["U"][2,::-1]tmp["F"][:,:]=anti_cw(data["F"])elif op=="r":tmp["U"][:,2]=data["B"][::-1,0]tmp["B"][:,0]=data["D"][::-1,2]tmp["D"][:,2]=data["F"][:,2]tmp["F"][:,2]=data["U"][:,2]tmp["R"][:,:]=anti_cw(data["R"])elif op=="u":tmp["R"][0,:]=data["F"][0,:]tmp["F"][0,:]=data["L"][0,:]tmp["L"][0,:]=data["B"][0,:]tmp["B"][0,:]=data["R"][0,:]tmp["U"][:,:]=anti_cw(data["U"])elif op=="b":tmp["R"][:,2]=data["U"][0,:]tmp["U"][0,:]=data["L"][::-1,0]tmp["L"][:,0]=data["D"][2,:]tmp["D"][2,:]=data["R"][::-1,2]tmp["B"][:,:]=anti_cw(data["B"])elif op=="l":tmp["B"][:,2]=data["U"][::-1,0]tmp["U"][:,0]=data["F"][:,0]tmp["F"][:,0]=data["D"][:,0]tmp["D"][:,0]=data["B"][::-1,2]tmp["L"][:,:]=anti_cw(data["L"])elif op=="d":tmp["L"][2,:]=data["F"][2,:]tmp["F"][2,:]=data["R"][2,:]tmp["R"][2,:]=data["B"][2,:]tmp["B"][2,:]=data["L"][2,:]tmp["D"][:,:]=anti_cw(data["D"])elif op=="m":tmp["L"][1,:]=data["F"][1,:]tmp["F"][1,:]=data["R"][1,:]tmp["R"][1,:]=data["B"][1,:]tmp["B"][1,:]=data["L"][1,:]mf.data=tmpreturn tmp
#############################mf=MF()
def moves(lst):for x in lst:move(mf.data,x)
def solve(data):tmp=cp.deepcopy(data)def judge_color(i,j):if mf.data["U"][i,j]==1:# print(mf.data["U"])move(mf.data,"U")judge_color(i,j)else:return Nonedef step1():while not (mf.data["U"][0,1]==1 and mf.data["U"][1,0]==1 and mf.data["U"][2,1]==1 and mf.data["U"][1,2]==1):if mf.data["F"][1,2]==1:judge_color(1,2)move(mf.data,"R")elif mf.data["F"][1,0]==1:judge_color(1,0)move(mf.data,"l")elif mf.data["F"][0,1]==1 or mf.data["F"][2,1]==1:judge_color(2,1)move(mf.data,"F")elif mf.data["B"][1,0]==1:judge_color(1,2)move(mf.data,"r")elif mf.data["B"][1,2]==1:judge_color(1,0)move(mf.data,"L")elif mf.data["B"][0,1]==1 or mf.data["B"][2,1]==1:judge_color(0,1)move(mf.data,"B")elif mf.data["L"][1,0]==1:judge_color(0,1)move(mf.data,"b")elif mf.data["L"][1,2]==1:judge_color(2,1)move(mf.data,"F")elif mf.data["L"][0,1]==1 or mf.data["L"][2,1]==1:judge_color(1,0)move(mf.data,"L")elif mf.data["R"][1,0]==1:judge_color(2,1)move(mf.data,"f")elif mf.data["R"][1,2]==1:judge_color(0,1)move(mf.data,"B")elif mf.data["R"][0,1]==1 or mf.data["R"][2,1]==1:judge_color(1,2)move(mf.data,"R")elif mf.data["D"][0,1]==1:judge_color(2,1)move(mf.data,"F")move(mf.data,"F")elif mf.data["D"][1,0]==1:judge_color(1,0)move(mf.data,"L")move(mf.data,"L")elif mf.data["D"][1,2]==1:judge_color(1,2)move(mf.data,"R")move(mf.data,"R")elif mf.data["D"][2,1]==1:judge_color(0,1)move(mf.data,"B")move(mf.data,"B")def step2():while not (mf.data["D"][0,1]==1 and mf.data["D"][1,0]==1 and mf.data["D"][2,1]==1 and mf.data["D"][1,2]==1):if mf.data["U"][1,2]==1 and mf.data["R"][0,1]==mf.data["R"][1,1]:move(mf.data,"R")move(mf.data,"R")elif mf.data["U"][2,1]==1 and mf.data["F"][0,1]==mf.data["F"][1,1]:move(mf.data,"F")move(mf.data,"F")elif mf.data["U"][1,0]==1 and mf.data["L"][0,1]==mf.data["L"][1,1]:move(mf.data,"L")move(mf.data,"L")elif mf.data["U"][0,1]==1 and mf.data["B"][0,1]==mf.data["B"][1,1]:move(mf.data,"B")move(mf.data,"B")else:move(mf.data,"U")def eq(lst):assert len(lst)==3if lst[0]==lst[1] and lst[1]==lst[2]:return Truereturn Falseformula={"left":"ulUL","right":"URur","yizi":"RUrurFRf","guaijiao":"FRuruRUrf","lfish":"luLuluuL","rfish":"RUrURUUr"}def step3():while not (eq(mf.data["D"][0,:]) and eq(mf.data["D"][:,2]) and eq(mf.data["D"][2,:]) and eq(mf.data["D"][:,0]) andeq(mf.data["F"][2,:]) and eq(mf.data["L"][2,:]) and eq(mf.data["R"][2,:]) and eq(mf.data["B"][2,:])):if mf.data["F"][0,0]==1:color1=mf.data["U"][2,0]color2=mf.data["L"][0,2]if color1==mf.data["F"][1,1] and color2==mf.data["L"][1,1]:moves(formula["left"])else:moves("MD")elif mf.data["F"][0,2]==1:color1=mf.data["U"][2,2]color2=mf.data["R"][0,0]if color1==mf.data["F"][1,1] and color2==mf.data["R"][1,1]:moves(formula["right"])else:moves("MD")elif mf.data["L"][0,0]==1 or mf.data["L"][0,2]==1:moves("u")elif mf.data["R"][0,0]==1 or mf.data["R"][0,2]==1:moves("U")elif mf.data["B"][0,0]==1 or mf.data["B"][0,2]==1:moves("UU")elif mf.data["F"][2,2]==1:moves(formula["right"])elif mf.data["F"][2,0]==1:moves(formula["left"])elif mf.data["L"][2,0]==1 or mf.data["L"][2,2]==1:moves("MD")elif mf.data["R"][2,0]==1 or mf.data["R"][2,2]==1:moves("md")elif mf.data["B"][2,0]==1 or mf.data["B"][2,2]==1:moves("MMDD")elif mf.data["U"][2,0]==1:if mf.data["L"][0,2]==mf.data["F"][1,1] and mf.data["F"][0,0]==mf.data["L"][1,1]:moves(formula["left"])else:moves("MD")elif mf.data["U"][2,2]==1:if mf.data["R"][0,0]==mf.data["F"][1,1] and mf.data["F"][0,2]==mf.data["R"][1,1]:moves(formula["right"])else:moves("MD")elif mf.data["U"][0,0]==1:moves("u")elif mf.data["U"][0,2]==1:moves("U")elif mf.data["D"][0,0]==1 and not (mf.data["F"][2,0]==mf.data["F"][2,1] and mf.data["L"][2,1]==mf.data["L"][2,2]):moves(formula["left"])elif mf.data["D"][0,2]==1 and not (mf.data["F"][2,1]==mf.data["F"][2,2] and mf.data["R"][2,0]==mf.data["R"][2,1]):moves(formula["right"])elif mf.data["D"][2,0]==1 and not (mf.data["B"][2,1]==mf.data["B"][2,2] and mf.data["L"][2,0]==mf.data["L"][2,1]):moves("MMDD")elif mf.data["D"][2,2]==1 and not (mf.data["B"][2,0]==mf.data["B"][2,1] and mf.data["R"][2,1]==mf.data["R"][2,2]):moves("MMDD")def dt(face_x_y):return mf.data[face_x_y[0]][int(face_x_y[1]),int(face_x_y[2])]def step4():uMD_cnt=0while not (eq(mf.data["F"][1,:]) and eq(mf.data["L"][1,:]) and eq(mf.data["R"][1,:]) and eq(mf.data["B"][1,:])):if dt("F01")==dt("F11") and dt("U21")==dt("R11"):moves(formula["right"]+"Umd"+formula["left"])elif dt("F01")==dt("F11") and dt("U21")==dt("L11"):moves(formula["left"]+"uMD"+formula["right"])elif dt("F11")==dt("L01"):moves("u")elif dt("F11")==dt("R01"):moves("U")elif dt("F11")==dt("B01"):moves("UU")elif uMD_cnt<5:uMD_cnt+=1moves("uMD")else:uMD_cnt=0while dt("F11")==dt("F12") and dt("F11")==dt("F10"):moves("MD")if dt("F11")!=dt("F12"):moves(formula["right"]+"Umd"+formula["left"])elif dt("F11")!=dt("F10"):moves(formula["left"]+"uMD"+formula["right"])def step5():while not (eq(mf.data["U"][1,:]) and eq(mf.data["U"][:,1])):if eq(mf.data["U"][1,:]) and dt("F01")==dt("U11"):moves(formula["yizi"])elif dt("U01")==dt("U11") and dt("U10")==dt("U11") and dt("F01")==dt("U11") and dt("R01")==dt("U11"):moves(formula["guaijiao"])elif dt("F01")==dt("U11") and dt("R01")==dt("U11"):moves(formula["yizi"])else:moves("U")def step6():cnt=0while not (eq(mf.data["U"][0,:]) and eq(mf.data["U"][1,:]) and eq(mf.data["U"][2,:]) and eq(mf.data["U"][:,0])):lst=[dt("U00"),dt("U02"),dt("U20"),dt("U22")]SUM=0for x in lst:if x!=dt("U11"):SUM+=1if dt("U20")==dt("U11") and dt("F02")==dt("U11") and dt("R02")==dt("U11") and dt("B02")==dt("U11"):moves(formula["rfish"])elif dt("U22")==dt("U11") and dt("F00")==dt("U11") and dt("L00")==dt("U11") and dt("B00")==dt("U11"):moves(formula["lfish"])elif SUM==3:moves("U")else:while dt("F00")!=dt("U11"):moves("U")moves(formula["rfish"])def step7():while True:SUM=0for x in "FRBL":if dt(x+"00")==dt(x+"02"):SUM+=1if SUM>=2:breakif SUM==0:while dt("F00")==dt("F02") or dt("F00")==dt("L00") or dt("L00")==dt("F02"):moves("U")moves(formula["guaijiao"]+formula["yizi"])elif SUM==1:while dt("L00")!=dt("L02"):moves("U")moves(formula["yizi"]+formula["guaijiao"])def step8():while True:SUM=0for x in "FRBL":if eq(mf.data[x][0,:]):SUM+=1if SUM==4:while dt("F00")!=dt("F11"):moves("U")breakif SUM==0:moves(formula["lfish"]+"u"+formula["rfish"])elif SUM==1:while not eq(mf.data["B"][0,:]):moves("U")while not eq(mf.data["B"][:,0]):moves("MD")if dt("L01")==dt("F11"):moves(formula["lfish"]+"u"+formula["rfish"])elif dt("R01")==dt("F11"):moves(formula["rfish"]+"U"+formula["lfish"])while dt("F11")!=4:moves("uMD")step1()print(len(OPPS))step2()print(len(OPPS))step3()print(len(OPPS))step4()print(len(OPPS))step5()print(len(OPPS))step6()print(len(OPPS))step7()print(len(OPPS))step8()return True

四、运行函数

if __name__ == "__main__":app = QApplication(sys.argv)example=Example()example.show()ops=["F","R","U","B","L","D"]TIME=0for t in range(1):OPPS=""shuffle=""seed=np.random.randint(1,1000000)np.random.seed(seed)print("seed",seed)for i in range(50):shuffle+=ops[np.random.randint(0,len(ops))]moves(shuffle)time1=time.time()solve(mf.data)time2=time.time()TIME+=(time2-time1)print("打乱公式:",shuffle)print("求解公式:",OPPS[len(shuffle):])print("求解步数:",len(OPPS[len(shuffle):]))print(t,TIME)app.exec_()

全部代码

import sys
from PyQt5.QtWidgets import (QApplication, QWidget)
from PyQt5.QtGui import (QPainter, QPen,QColor,QPixmap,QImage,QFont,QPolygon)
from PyQt5.QtCore import Qt,QRect
from PyQt5.QtWidgets import QWidget, QApplication, QPushButton, QMenu,QAbstractButton,QFileDialog,QMessageBox,QInputDialog,QLineEdit,QTextEdit
import PyQt5.QtWidgets as QtWidgets
import PyQt5.QtGui as QtGui
import PyQt5.QtCore as QtCore
from PyQt5 import *
import numpy as np
import threading
import math
import cv2
import copy as cp
import timefile=""face=["U","D","L","R","F","B"]
color_name=["Y","W","O","R","B","G"]
color0=[(253,200,60),(246,246,246),(220,90,70),(255,0,0),(0,67,188),(0,220,150)]
color=[]
for x in color0:color.append((x[2],x[1],x[0]))class MF:def __init__(self):self.data={}for i,x in enumerate(face):self.data[x]=np.ones([3,3])*iclass Example(QWidget):def __init__(self):super(Example, self).__init__()self.cnt=0self.initUI()def initUI(self):w, h = 800, 600screen = QtWidgets.QDesktopWidget().screenGeometry()self.setGeometry((screen.width() - w) // 2, (screen.height() - h) // 2, w, h)self.setWindowTitle("三阶魔方")self.ops=["F","R","U","B","L","D"]self.textEdit = QtWidgets.QTextEdit(self)self.textEdit.setGeometry(580, 50, 180, 30)# self.textEdit.setStyleSheet("color:red")font = QtGui.QFont()font.setFamily('宋体')font.setBold(True)font.setPointSize(12)font.setWeight(75)self.textEdit.setFont(font)btn_run=QPushButton("执行公式",self)btn_run.setGeometry(580,10,100,30)btn_run.clicked.connect(self.connect_run)btn_solve=QPushButton("求解魔方",self)btn_solve.setGeometry(30,20,60,30)btn_solve.clicked.connect(self.connect_solve)btn_F=QPushButton("F",self)btn_F.setGeometry(120,10,40,30)btn_F.clicked.connect(self.connect_F)btn_R=QPushButton("R",self)btn_R.setGeometry(180,10,40,30)btn_R.clicked.connect(self.connect_R)btn_U=QPushButton("U",self)btn_U.setGeometry(240,10,40,30)btn_U.clicked.connect(self.connect_U)btn_B=QPushButton("B",self)btn_B.setGeometry(300,10,40,30)btn_B.clicked.connect(self.connect_B)btn_L=QPushButton("L",self)btn_L.setGeometry(360,10,40,30)btn_L.clicked.connect(self.connect_L)btn_D=QPushButton("D",self)btn_D.setGeometry(420,10,40,30)btn_D.clicked.connect(self.connect_D)btn_M=QPushButton("M",self)btn_M.setGeometry(480,10,40,30)btn_M.clicked.connect(self.connect_M)btn_f=QPushButton("F'",self)btn_f.setGeometry(120,50,40,30)btn_f.clicked.connect(self.connect_f)btn_r=QPushButton("R'",self)btn_r.setGeometry(180,50,40,30)btn_r.clicked.connect(self.connect_r)btn_u=QPushButton("U'",self)btn_u.setGeometry(240,50,40,30)btn_u.clicked.connect(self.connect_u)btn_b=QPushButton("B'",self)btn_b.setGeometry(300,50,40,30)btn_b.clicked.connect(self.connect_b)btn_l=QPushButton("L'",self)btn_l.setGeometry(360,50,40,30)btn_l.clicked.connect(self.connect_l)btn_d=QPushButton("D'",self)btn_d.setGeometry(420,50,40,30)btn_d.clicked.connect(self.connect_d)btn_m=QPushButton("M'",self)btn_m.setGeometry(480,50,40,30)btn_m.clicked.connect(self.connect_m)def connect_solve(self):global OPPSOPPS=""solve(mf.data)self.update()print(OPPS)def connect_F(self):move(mf.data,"F")self.update()def connect_R(self):move(mf.data,"R")self.update()def connect_U(self):move(mf.data,"U")self.update()def connect_B(self):move(mf.data,"B")self.update()def connect_L(self):move(mf.data,"L")self.update()def connect_D(self):move(mf.data,"D")self.update()def connect_M(self):move(mf.data,"M")self.update()def connect_f(self):move(mf.data,"f")self.update()def connect_r(self):move(mf.data,"r")self.update()def connect_u(self):move(mf.data,"u")self.update()def connect_b(self):move(mf.data,"b")self.update()def connect_l(self):move(mf.data,"l")self.update()def connect_d(self):move(mf.data,"d")self.update()def connect_m(self):move(mf.data,"m")self.update()def connect_run(self):tmp=self.textEdit.toPlainText()for op in tmp:move(mf.data,op)self.update()# time.sleep(1)def paintEvent(self, event):painter = QPainter()painter.begin(self)pen = QPen(QColor(255,0,255), 2, Qt.SolidLine)painter.setPen(pen)bgi=np.zeros([900,900,3])*255min_x=200max_x=500f_lu=min_xf_rd=min_x+(max_x-min_x)/3x=[f_lu,f_rd,f_rd,f_lu]y=[f_lu,f_lu,f_rd,f_rd]for i in range(3):for j in range(3):arr=[]for k in range(4):arr.append([x[k]+(max_x-min_x+20)*i/3,y[k]+(max_x-min_x+20)*j/3])arr=np.array(arr,dtype=np.int32)arr=np.reshape(arr,[-1,1,2])cv2.fillPoly(bgi,[arr],color[int(mf.data["F"][j,i])])x=[260,360,340,240]y=[100,100,130,130]for i in range(3):for j in range(3):# arr=[[x[0]+100*i,y[0]+35*j],[x[1]+100*i,y[1]+35*j],[x[2]+100*i,y[2]+35*j],[x[3]+100*i,y[3]+35*j]]arr=[]for k in range(4):arr.append([x[k]+106*i-20*j,y[k]+34*j-5])arr=np.array(arr,dtype=np.int32)arr=np.reshape(arr,[-1,1,2])cv2.fillPoly(bgi,[arr],color[int(mf.data["U"][j,i])])x=[500,514,514,500]y=[200,166+9,266+9,300]for i in range(3):for j in range(3):# arr=[[x[0]+100*i,y[0]+35*j],[x[1]+100*i,y[1]+35*j],[x[2]+100*i,y[2]+35*j],[x[3]+100*i,y[3]+35*j]]arr=[]for k in range(4):arr.append([x[k]+20*i+18,y[k]+110*j-34*i-6])arr=np.array(arr,dtype=np.int32)arr=np.reshape(arr,[-1,1,2])cv2.fillPoly(bgi,[arr],color[int(mf.data["R"][j,i])])  ############Lcnti=0for i in range(600-5,630-5,10):cntj=0for j in range(300,330,10):cv2.rectangle(bgi,(i,j),(i+8,j+8),color[int(mf.data["L"][cntj,cnti])],thickness=-1)cntj+=1cnti+=1############Ucnti=0for i in range(630,660,10):cntj=0for j in range(270-5,300-5,10):cv2.rectangle(bgi,(i,j),(i+8,j+8),color[int(mf.data["U"][cntj,cnti])],thickness=-1)cntj+=1cnti+=1############Fcnti=0for i in range(630,660,10):cntj=0for j in range(300,330,10):cv2.rectangle(bgi,(i,j),(i+8,j+8),color[int(mf.data["F"][cntj,cnti])],thickness=-1)cntj+=1cnti+=1############Dcnti=0for i in range(630,660,10):cntj=0for j in range(330+5,360+5,10):cv2.rectangle(bgi,(i,j),(i+8,j+8),color[int(mf.data["D"][cntj,cnti])],thickness=-1)cntj+=1cnti+=1############Rcnti=0for i in range(660+5,690+5,10):cntj=0for j in range(300,330,10):cv2.rectangle(bgi,(i,j),(i+8,j+8),color[int(mf.data["R"][cntj,cnti])],thickness=-1)cntj+=1cnti+=1############Bcnti=0for i in range(690+10,720+10,10):cntj=0for j in range(300,330,10):cv2.rectangle(bgi,(i,j),(i+8,j+8),color[int(mf.data["B"][cntj,cnti])],thickness=-1)# cv2.putText(bgi,str(cnti)+""+str(cntj),(i-650+cnti*40,j+60*cntj),cv2.FONT_HERSHEY_COMPLEX,1,(0,0,255),1)cntj+=1cnti+=1cv2.imwrite("D:/bgi_mf.jpg",bgi) self.cnt+=1#cv2.imwrite("D:/"+str(self.cnt)+".jpg",bgi)if True:file="D:/bgi_mf.jpg"pixmap = QPixmap(file)temp = cv2.imread(file)self.imgShape=[temp.shape[0], temp.shape[1]]painter.drawPixmap(QRect(0, 0, temp.shape[0], temp.shape[1]), pixmap)painter.end()def event2point(self,event):return [event.pos().x(),event.pos().y()]def mousePressEvent(self, event):self.update()def mouseMoveEvent(self, event):self.update()def mouseReleaseEvent(self, event):self.update()STEP=0
OPPS=""
def move(data,op):global STEP,OPPSSTEP+=1OPPS+=opdef cw(data):tmp=cp.deepcopy(data)tmp[0,0]=data[2,0]tmp[2,0]=data[2,2]tmp[2,2]=data[0,2]tmp[0,2]=data[0,0]tmp[0,1]=data[1,0]tmp[1,0]=data[2,1]tmp[2,1]=data[1,2]tmp[1,2]=data[0,1]return tmpdef anti_cw(data):tmp=cp.deepcopy(data)tmp[2,0]=data[0,0]tmp[2,2]=data[2,0]tmp[0,2]=data[2,2]tmp[0,0]=data[0,2]tmp[1,0]=data[0,1]tmp[2,1]=data[1,0]tmp[1,2]=data[2,1]tmp[0,1]=data[1,2]return tmptmp=cp.deepcopy(data)if op=="F":tmp["R"][:,0]=data["U"][2,:]tmp["D"][0,:]=data["R"][::-1,0]tmp["L"][:,2]=data["D"][0,:]tmp["U"][2,:]=data["L"][::-1,2]tmp["F"][:,:]=cw(data["F"])elif op=="R":tmp["B"][:,0]=data["U"][::-1,2]tmp["D"][:,2]=data["B"][::-1,0]tmp["F"][:,2]=data["D"][:,2]tmp["U"][:,2]=data["F"][:,2]tmp["R"][:,:]=cw(data["R"])elif op=="U":tmp["F"][0,:]=data["R"][0,:]tmp["L"][0,:]=data["F"][0,:]tmp["B"][0,:]=data["L"][0,:]tmp["R"][0,:]=data["B"][0,:]tmp["U"][:,:]=cw(data["U"])elif op=="B":tmp["U"][0,:]=data["R"][:,2]tmp["L"][:,0]=data["U"][0,::-1]tmp["D"][2,:]=data["L"][:,0]tmp["R"][:,2]=data["D"][2,::-1]tmp["B"][:,:]=cw(data["B"])elif op=="L":tmp["U"][:,0]=data["B"][::-1,2]tmp["F"][:,0]=data["U"][:,0]tmp["D"][:,0]=data["F"][:,0]tmp["B"][:,2]=data["D"][::-1,0]tmp["L"][:,:]=cw(data["L"])elif op=="D":tmp["F"][2,:]=data["L"][2,:]tmp["R"][2,:]=data["F"][2,:]tmp["B"][2,:]=data["R"][2,:]tmp["L"][2,:]=data["B"][2,:]tmp["D"][:,:]=cw(data["D"])elif op=="M":tmp["F"][1,:]=data["L"][1,:]tmp["R"][1,:]=data["F"][1,:]tmp["B"][1,:]=data["R"][1,:]tmp["L"][1,:]=data["B"][1,:]#####################################elif op=="f":tmp["U"][2,:]=data["R"][:,0]tmp["R"][:,0]=data["D"][0,::-1]tmp["D"][0,:]=data["L"][:,2]tmp["L"][:,2]=data["U"][2,::-1]tmp["F"][:,:]=anti_cw(data["F"])elif op=="r":tmp["U"][:,2]=data["B"][::-1,0]tmp["B"][:,0]=data["D"][::-1,2]tmp["D"][:,2]=data["F"][:,2]tmp["F"][:,2]=data["U"][:,2]tmp["R"][:,:]=anti_cw(data["R"])elif op=="u":tmp["R"][0,:]=data["F"][0,:]tmp["F"][0,:]=data["L"][0,:]tmp["L"][0,:]=data["B"][0,:]tmp["B"][0,:]=data["R"][0,:]tmp["U"][:,:]=anti_cw(data["U"])elif op=="b":tmp["R"][:,2]=data["U"][0,:]tmp["U"][0,:]=data["L"][::-1,0]tmp["L"][:,0]=data["D"][2,:]tmp["D"][2,:]=data["R"][::-1,2]tmp["B"][:,:]=anti_cw(data["B"])elif op=="l":tmp["B"][:,2]=data["U"][::-1,0]tmp["U"][:,0]=data["F"][:,0]tmp["F"][:,0]=data["D"][:,0]tmp["D"][:,0]=data["B"][::-1,2]tmp["L"][:,:]=anti_cw(data["L"])elif op=="d":tmp["L"][2,:]=data["F"][2,:]tmp["F"][2,:]=data["R"][2,:]tmp["R"][2,:]=data["B"][2,:]tmp["B"][2,:]=data["L"][2,:]tmp["D"][:,:]=anti_cw(data["D"])elif op=="m":tmp["L"][1,:]=data["F"][1,:]tmp["F"][1,:]=data["R"][1,:]tmp["R"][1,:]=data["B"][1,:]tmp["B"][1,:]=data["L"][1,:]mf.data=tmpreturn tmp
#############################mf=MF()
def moves(lst):for x in lst:move(mf.data,x)
def solve(data):tmp=cp.deepcopy(data)def judge_color(i,j):if mf.data["U"][i,j]==1:# print(mf.data["U"])move(mf.data,"U")judge_color(i,j)else:return Nonedef step1():while not (mf.data["U"][0,1]==1 and mf.data["U"][1,0]==1 and mf.data["U"][2,1]==1 and mf.data["U"][1,2]==1):if mf.data["F"][1,2]==1:judge_color(1,2)move(mf.data,"R")elif mf.data["F"][1,0]==1:judge_color(1,0)move(mf.data,"l")elif mf.data["F"][0,1]==1 or mf.data["F"][2,1]==1:judge_color(2,1)move(mf.data,"F")elif mf.data["B"][1,0]==1:judge_color(1,2)move(mf.data,"r")elif mf.data["B"][1,2]==1:judge_color(1,0)move(mf.data,"L")elif mf.data["B"][0,1]==1 or mf.data["B"][2,1]==1:judge_color(0,1)move(mf.data,"B")elif mf.data["L"][1,0]==1:judge_color(0,1)move(mf.data,"b")elif mf.data["L"][1,2]==1:judge_color(2,1)move(mf.data,"F")elif mf.data["L"][0,1]==1 or mf.data["L"][2,1]==1:judge_color(1,0)move(mf.data,"L")elif mf.data["R"][1,0]==1:judge_color(2,1)move(mf.data,"f")elif mf.data["R"][1,2]==1:judge_color(0,1)move(mf.data,"B")elif mf.data["R"][0,1]==1 or mf.data["R"][2,1]==1:judge_color(1,2)move(mf.data,"R")elif mf.data["D"][0,1]==1:judge_color(2,1)move(mf.data,"F")move(mf.data,"F")elif mf.data["D"][1,0]==1:judge_color(1,0)move(mf.data,"L")move(mf.data,"L")elif mf.data["D"][1,2]==1:judge_color(1,2)move(mf.data,"R")move(mf.data,"R")elif mf.data["D"][2,1]==1:judge_color(0,1)move(mf.data,"B")move(mf.data,"B")def step2():while not (mf.data["D"][0,1]==1 and mf.data["D"][1,0]==1 and mf.data["D"][2,1]==1 and mf.data["D"][1,2]==1):if mf.data["U"][1,2]==1 and mf.data["R"][0,1]==mf.data["R"][1,1]:move(mf.data,"R")move(mf.data,"R")elif mf.data["U"][2,1]==1 and mf.data["F"][0,1]==mf.data["F"][1,1]:move(mf.data,"F")move(mf.data,"F")elif mf.data["U"][1,0]==1 and mf.data["L"][0,1]==mf.data["L"][1,1]:move(mf.data,"L")move(mf.data,"L")elif mf.data["U"][0,1]==1 and mf.data["B"][0,1]==mf.data["B"][1,1]:move(mf.data,"B")move(mf.data,"B")else:move(mf.data,"U")def eq(lst):assert len(lst)==3if lst[0]==lst[1] and lst[1]==lst[2]:return Truereturn Falseformula={"left":"ulUL","right":"URur","yizi":"RUrurFRf","guaijiao":"FRuruRUrf","lfish":"luLuluuL","rfish":"RUrURUUr"}def step3():while not (eq(mf.data["D"][0,:]) and eq(mf.data["D"][:,2]) and eq(mf.data["D"][2,:]) and eq(mf.data["D"][:,0]) andeq(mf.data["F"][2,:]) and eq(mf.data["L"][2,:]) and eq(mf.data["R"][2,:]) and eq(mf.data["B"][2,:])):if mf.data["F"][0,0]==1:color1=mf.data["U"][2,0]color2=mf.data["L"][0,2]if color1==mf.data["F"][1,1] and color2==mf.data["L"][1,1]:moves(formula["left"])else:moves("MD")elif mf.data["F"][0,2]==1:color1=mf.data["U"][2,2]color2=mf.data["R"][0,0]if color1==mf.data["F"][1,1] and color2==mf.data["R"][1,1]:moves(formula["right"])else:moves("MD")elif mf.data["L"][0,0]==1 or mf.data["L"][0,2]==1:moves("u")elif mf.data["R"][0,0]==1 or mf.data["R"][0,2]==1:moves("U")elif mf.data["B"][0,0]==1 or mf.data["B"][0,2]==1:moves("UU")elif mf.data["F"][2,2]==1:moves(formula["right"])elif mf.data["F"][2,0]==1:moves(formula["left"])elif mf.data["L"][2,0]==1 or mf.data["L"][2,2]==1:moves("MD")elif mf.data["R"][2,0]==1 or mf.data["R"][2,2]==1:moves("md")elif mf.data["B"][2,0]==1 or mf.data["B"][2,2]==1:moves("MMDD")elif mf.data["U"][2,0]==1:if mf.data["L"][0,2]==mf.data["F"][1,1] and mf.data["F"][0,0]==mf.data["L"][1,1]:moves(formula["left"])else:moves("MD")elif mf.data["U"][2,2]==1:if mf.data["R"][0,0]==mf.data["F"][1,1] and mf.data["F"][0,2]==mf.data["R"][1,1]:moves(formula["right"])else:moves("MD")elif mf.data["U"][0,0]==1:moves("u")elif mf.data["U"][0,2]==1:moves("U")elif mf.data["D"][0,0]==1 and not (mf.data["F"][2,0]==mf.data["F"][2,1] and mf.data["L"][2,1]==mf.data["L"][2,2]):moves(formula["left"])elif mf.data["D"][0,2]==1 and not (mf.data["F"][2,1]==mf.data["F"][2,2] and mf.data["R"][2,0]==mf.data["R"][2,1]):moves(formula["right"])elif mf.data["D"][2,0]==1 and not (mf.data["B"][2,1]==mf.data["B"][2,2] and mf.data["L"][2,0]==mf.data["L"][2,1]):moves("MMDD")elif mf.data["D"][2,2]==1 and not (mf.data["B"][2,0]==mf.data["B"][2,1] and mf.data["R"][2,1]==mf.data["R"][2,2]):moves("MMDD")def dt(face_x_y):return mf.data[face_x_y[0]][int(face_x_y[1]),int(face_x_y[2])]def step4():uMD_cnt=0while not (eq(mf.data["F"][1,:]) and eq(mf.data["L"][1,:]) and eq(mf.data["R"][1,:]) and eq(mf.data["B"][1,:])):if dt("F01")==dt("F11") and dt("U21")==dt("R11"):moves(formula["right"]+"Umd"+formula["left"])elif dt("F01")==dt("F11") and dt("U21")==dt("L11"):moves(formula["left"]+"uMD"+formula["right"])elif dt("F11")==dt("L01"):moves("u")elif dt("F11")==dt("R01"):moves("U")elif dt("F11")==dt("B01"):moves("UU")elif uMD_cnt<5:uMD_cnt+=1moves("uMD")else:uMD_cnt=0while dt("F11")==dt("F12") and dt("F11")==dt("F10"):moves("MD")if dt("F11")!=dt("F12"):moves(formula["right"]+"Umd"+formula["left"])elif dt("F11")!=dt("F10"):moves(formula["left"]+"uMD"+formula["right"])def step5():while not (eq(mf.data["U"][1,:]) and eq(mf.data["U"][:,1])):if eq(mf.data["U"][1,:]) and dt("F01")==dt("U11"):moves(formula["yizi"])elif dt("U01")==dt("U11") and dt("U10")==dt("U11") and dt("F01")==dt("U11") and dt("R01")==dt("U11"):moves(formula["guaijiao"])elif dt("F01")==dt("U11") and dt("R01")==dt("U11"):moves(formula["yizi"])else:moves("U")def step6():cnt=0while not (eq(mf.data["U"][0,:]) and eq(mf.data["U"][1,:]) and eq(mf.data["U"][2,:]) and eq(mf.data["U"][:,0])):lst=[dt("U00"),dt("U02"),dt("U20"),dt("U22")]SUM=0for x in lst:if x!=dt("U11"):SUM+=1if dt("U20")==dt("U11") and dt("F02")==dt("U11") and dt("R02")==dt("U11") and dt("B02")==dt("U11"):moves(formula["rfish"])elif dt("U22")==dt("U11") and dt("F00")==dt("U11") and dt("L00")==dt("U11") and dt("B00")==dt("U11"):moves(formula["lfish"])elif SUM==3:moves("U")else:while dt("F00")!=dt("U11"):moves("U")moves(formula["rfish"])def step7():while True:SUM=0for x in "FRBL":if dt(x+"00")==dt(x+"02"):SUM+=1if SUM>=2:breakif SUM==0:while dt("F00")==dt("F02") or dt("F00")==dt("L00") or dt("L00")==dt("F02"):moves("U")moves(formula["guaijiao"]+formula["yizi"])elif SUM==1:while dt("L00")!=dt("L02"):moves("U")moves(formula["yizi"]+formula["guaijiao"])def step8():while True:SUM=0for x in "FRBL":if eq(mf.data[x][0,:]):SUM+=1if SUM==4:while dt("F00")!=dt("F11"):moves("U")breakif SUM==0:moves(formula["lfish"]+"u"+formula["rfish"])elif SUM==1:while not eq(mf.data["B"][0,:]):moves("U")while not eq(mf.data["B"][:,0]):moves("MD")if dt("L01")==dt("F11"):moves(formula["lfish"]+"u"+formula["rfish"])elif dt("R01")==dt("F11"):moves(formula["rfish"]+"U"+formula["lfish"])while dt("F11")!=4:moves("uMD")step1()print(len(OPPS))step2()print(len(OPPS))step3()print(len(OPPS))step4()print(len(OPPS))step5()print(len(OPPS))step6()print(len(OPPS))step7()print(len(OPPS))step8()return True
if __name__ == "__main__":app = QApplication(sys.argv)example=Example()example.show()ops=["F","R","U","B","L","D"]TIME=0for t in range(1):OPPS=""shuffle=""seed=np.random.randint(1,1000000)np.random.seed(seed)print("seed",seed)for i in range(50):shuffle+=ops[np.random.randint(0,len(ops))]moves(shuffle)time1=time.time()solve(mf.data)time2=time.time()TIME+=(time2-time1)print("打乱公式:",shuffle)print("求解公式:",OPPS[len(shuffle):])print("求解步数:",len(OPPS[len(shuffle):]))print(t,TIME)app.exec_()

没有登陆的可以复制这个:

import sys
from PyQt5.QtWidgets import (QApplication, QWidget)
from PyQt5.QtGui import (QPainter, QPen,QColor,QPixmap,QImage,QFont,QPolygon)
from PyQt5.QtCore import Qt,QRect
from PyQt5.QtWidgets import QWidget, QApplication, QPushButton, QMenu,QAbstractButton,QFileDialog,QMessageBox,QInputDialog,QLineEdit,QTextEdit
import PyQt5.QtWidgets as QtWidgets
import PyQt5.QtGui as QtGui
import PyQt5.QtCore as QtCore
from PyQt5 import *
import numpy as np
import threading
import math
import cv2
import copy as cp
import time
 
file=""
 
face=["U","D","L","R","F","B"]
color_name=["Y","W","O","R","B","G"]
color0=[(253,200,60),(246,246,246),(220,90,70),(255,0,0),(0,67,188),(0,220,150)]
color=[]
for x in color0:
    color.append((x[2],x[1],x[0]))
 
class MF:
    def __init__(self):
        self.data={}
        for i,x in enumerate(face):
            self.data[x]=np.ones([3,3])*i
 
class Example(QWidget):
    def __init__(self):
        super(Example, self).__init__()
        self.cnt=0
        self.initUI()
    def initUI(self):
        w, h = 800, 600
        screen = QtWidgets.QDesktopWidget().screenGeometry()
        self.setGeometry((screen.width() - w) // 2, (screen.height() - h) // 2, w, h)
        self.setWindowTitle("三阶魔方")
        self.ops=["F","R","U","B","L","D"]
        
        self.textEdit = QtWidgets.QTextEdit(self)
        self.textEdit.setGeometry(580, 50, 180, 30)
        # self.textEdit.setStyleSheet("color:red")
        font = QtGui.QFont()
        font.setFamily('宋体')
        font.setBold(True)
        font.setPointSize(12)
        font.setWeight(75)
        self.textEdit.setFont(font)
 
        btn_run=QPushButton("执行公式",self)
        btn_run.setGeometry(580,10,100,30)
        btn_run.clicked.connect(self.connect_run)
 
        btn_solve=QPushButton("求解魔方",self)
        btn_solve.setGeometry(30,20,60,30)
        btn_solve.clicked.connect(self.connect_solve)
 
        btn_F=QPushButton("F",self)
        btn_F.setGeometry(120,10,40,30)
        btn_F.clicked.connect(self.connect_F)
        btn_R=QPushButton("R",self)
        btn_R.setGeometry(180,10,40,30)
        btn_R.clicked.connect(self.connect_R)
        btn_U=QPushButton("U",self)
        btn_U.setGeometry(240,10,40,30)
        btn_U.clicked.connect(self.connect_U)
        btn_B=QPushButton("B",self)
        btn_B.setGeometry(300,10,40,30)
        btn_B.clicked.connect(self.connect_B)
        btn_L=QPushButton("L",self)
        btn_L.setGeometry(360,10,40,30)
        btn_L.clicked.connect(self.connect_L)
        btn_D=QPushButton("D",self)
        btn_D.setGeometry(420,10,40,30)
        btn_D.clicked.connect(self.connect_D)
        btn_M=QPushButton("M",self)
        btn_M.setGeometry(480,10,40,30)
        btn_M.clicked.connect(self.connect_M)
 
        btn_f=QPushButton("F'",self)
        btn_f.setGeometry(120,50,40,30)
        btn_f.clicked.connect(self.connect_f)
        btn_r=QPushButton("R'",self)
        btn_r.setGeometry(180,50,40,30)
        btn_r.clicked.connect(self.connect_r)
        btn_u=QPushButton("U'",self)
        btn_u.setGeometry(240,50,40,30)
        btn_u.clicked.connect(self.connect_u)
        btn_b=QPushButton("B'",self)
        btn_b.setGeometry(300,50,40,30)
        btn_b.clicked.connect(self.connect_b)
        btn_l=QPushButton("L'",self)
        btn_l.setGeometry(360,50,40,30)
        btn_l.clicked.connect(self.connect_l)
        btn_d=QPushButton("D'",self)
        btn_d.setGeometry(420,50,40,30)
        btn_d.clicked.connect(self.connect_d)
        btn_m=QPushButton("M'",self)
        btn_m.setGeometry(480,50,40,30)
        btn_m.clicked.connect(self.connect_m)
    def connect_solve(self):
        global OPPS
        OPPS=""
        solve(mf.data)
        self.update()
        print(OPPS)
    def connect_F(self):
        move(mf.data,"F")
        self.update()
    def connect_R(self):
        move(mf.data,"R")
        self.update()
    def connect_U(self):
        move(mf.data,"U")
        self.update()
    def connect_B(self):
        move(mf.data,"B")
        self.update()
    def connect_L(self):
        move(mf.data,"L")
        self.update()
    def connect_D(self):
        move(mf.data,"D")
        self.update()
    def connect_M(self):
        move(mf.data,"M")
        self.update()
 
    def connect_f(self):
        move(mf.data,"f")
        self.update()
    def connect_r(self):
        move(mf.data,"r")
        self.update()
    def connect_u(self):
        move(mf.data,"u")
        self.update()
    def connect_b(self):
        move(mf.data,"b")
        self.update()
    def connect_l(self):
        move(mf.data,"l")
        self.update()
    def connect_d(self):
        move(mf.data,"d")
        self.update()
    def connect_m(self):
        move(mf.data,"m")
        self.update()
 
    def connect_run(self):
        tmp=self.textEdit.toPlainText()
        for op in tmp:
            move(mf.data,op)
            self.update()
            # time.sleep(1)
 
    def paintEvent(self, event):
        painter = QPainter()
        painter.begin(self)
        pen = QPen(QColor(255,0,255), 2, Qt.SolidLine)
        painter.setPen(pen)
        bgi=np.zeros([900,900,3])*255
        min_x=200
        max_x=500
        f_lu=min_x
        f_rd=min_x+(max_x-min_x)/3
        x=[f_lu,f_rd,f_rd,f_lu]
        y=[f_lu,f_lu,f_rd,f_rd]
        for i in range(3):
            for j in range(3):
                arr=[]
                for k in range(4):
                    arr.append([x[k]+(max_x-min_x+20)*i/3,y[k]+(max_x-min_x+20)*j/3])
                arr=np.array(arr,dtype=np.int32)
                arr=np.reshape(arr,[-1,1,2])
                cv2.fillPoly(bgi,[arr],color[int(mf.data["F"][j,i])])
        x=[260,360,340,240]
        y=[100,100,130,130]
        for i in range(3):
            for j in range(3):
                # arr=[[x[0]+100*i,y[0]+35*j],[x[1]+100*i,y[1]+35*j],[x[2]+100*i,y[2]+35*j],[x[3]+100*i,y[3]+35*j]]
                arr=[]
                for k in range(4):
                    arr.append([x[k]+106*i-20*j,y[k]+34*j-5])
                arr=np.array(arr,dtype=np.int32)
                arr=np.reshape(arr,[-1,1,2])
                cv2.fillPoly(bgi,[arr],color[int(mf.data["U"][j,i])])
        x=[500,514,514,500]
        y=[200,166+9,266+9,300]
        for i in range(3):
            for j in range(3):
                # arr=[[x[0]+100*i,y[0]+35*j],[x[1]+100*i,y[1]+35*j],[x[2]+100*i,y[2]+35*j],[x[3]+100*i,y[3]+35*j]]
                arr=[]
                for k in range(4):
                    arr.append([x[k]+20*i+18,y[k]+110*j-34*i-6])
                arr=np.array(arr,dtype=np.int32)
                arr=np.reshape(arr,[-1,1,2])
                cv2.fillPoly(bgi,[arr],color[int(mf.data["R"][j,i])])  
        ############L
        cnti=0
        for i in range(600-5,630-5,10):
            cntj=0
            for j in range(300,330,10):
                cv2.rectangle(bgi,(i,j),(i+8,j+8),color[int(mf.data["L"][cntj,cnti])],thickness=-1)
                cntj+=1
            cnti+=1
        ############U
        cnti=0
        for i in range(630,660,10):
            cntj=0
            for j in range(270-5,300-5,10):
                cv2.rectangle(bgi,(i,j),(i+8,j+8),color[int(mf.data["U"][cntj,cnti])],thickness=-1)
                cntj+=1
            cnti+=1
        ############F
        cnti=0
        for i in range(630,660,10):
            cntj=0
            for j in range(300,330,10):
                cv2.rectangle(bgi,(i,j),(i+8,j+8),color[int(mf.data["F"][cntj,cnti])],thickness=-1)
                cntj+=1
            cnti+=1
        ############D
        cnti=0
        for i in range(630,660,10):
            cntj=0
            for j in range(330+5,360+5,10):
                cv2.rectangle(bgi,(i,j),(i+8,j+8),color[int(mf.data["D"][cntj,cnti])],thickness=-1)
                cntj+=1
            cnti+=1
        ############R
        cnti=0
        for i in range(660+5,690+5,10):
            cntj=0
            for j in range(300,330,10):
                cv2.rectangle(bgi,(i,j),(i+8,j+8),color[int(mf.data["R"][cntj,cnti])],thickness=-1)
                cntj+=1
            cnti+=1
        ############B
        cnti=0
        for i in range(690+10,720+10,10):
            cntj=0
            for j in range(300,330,10):
                cv2.rectangle(bgi,(i,j),(i+8,j+8),color[int(mf.data["B"][cntj,cnti])],thickness=-1)
                # cv2.putText(bgi,str(cnti)+""+str(cntj),(i-650+cnti*40,j+60*cntj),cv2.FONT_HERSHEY_COMPLEX,1,(0,0,255),1)
                cntj+=1
            cnti+=1
 
 
        cv2.imwrite("D:/bgi_mf.jpg",bgi) 
        self.cnt+=1
        #cv2.imwrite("D:/"+str(self.cnt)+".jpg",bgi)
        if True:
            file="D:/bgi_mf.jpg"
            pixmap = QPixmap(file)
            temp = cv2.imread(file)
            self.imgShape=[temp.shape[0], temp.shape[1]]
            painter.drawPixmap(QRect(0, 0, temp.shape[0], temp.shape[1]), pixmap)
        painter.end()
    def event2point(self,event):
        return [event.pos().x(),event.pos().y()]
    def mousePressEvent(self, event):
        self.update()
    def mouseMoveEvent(self, event):
        self.update()
    def mouseReleaseEvent(self, event):
        self.update()
        
 
STEP=0
OPPS=""
def move(data,op):
    global STEP,OPPS
    STEP+=1
    OPPS+=op
    def cw(data):
            tmp=cp.deepcopy(data)
            tmp[0,0]=data[2,0]
            tmp[2,0]=data[2,2]
            tmp[2,2]=data[0,2]
            tmp[0,2]=data[0,0]
            tmp[0,1]=data[1,0]
            tmp[1,0]=data[2,1]
            tmp[2,1]=data[1,2]
            tmp[1,2]=data[0,1]
            return tmp
    def anti_cw(data):
        tmp=cp.deepcopy(data)
        tmp[2,0]=data[0,0]
        tmp[2,2]=data[2,0]
        tmp[0,2]=data[2,2]
        tmp[0,0]=data[0,2]
        tmp[1,0]=data[0,1]
        tmp[2,1]=data[1,0]
        tmp[1,2]=data[2,1]
        tmp[0,1]=data[1,2]
        return tmp
    tmp=cp.deepcopy(data)
    if op=="F":
        tmp["R"][:,0]=data["U"][2,:]
        tmp["D"][0,:]=data["R"][::-1,0]
        tmp["L"][:,2]=data["D"][0,:]
        tmp["U"][2,:]=data["L"][::-1,2]
        tmp["F"][:,:]=cw(data["F"])
    elif op=="R":
        tmp["B"][:,0]=data["U"][::-1,2]
        tmp["D"][:,2]=data["B"][::-1,0]
        tmp["F"][:,2]=data["D"][:,2]
        tmp["U"][:,2]=data["F"][:,2]
        tmp["R"][:,:]=cw(data["R"])
    elif op=="U":
        tmp["F"][0,:]=data["R"][0,:]
        tmp["L"][0,:]=data["F"][0,:]
        tmp["B"][0,:]=data["L"][0,:]
        tmp["R"][0,:]=data["B"][0,:]
        tmp["U"][:,:]=cw(data["U"])
    elif op=="B":
        tmp["U"][0,:]=data["R"][:,2]
        tmp["L"][:,0]=data["U"][0,::-1]
        tmp["D"][2,:]=data["L"][:,0]
        tmp["R"][:,2]=data["D"][2,::-1]
        tmp["B"][:,:]=cw(data["B"])
    elif op=="L":
        tmp["U"][:,0]=data["B"][::-1,2]
        tmp["F"][:,0]=data["U"][:,0]
        tmp["D"][:,0]=data["F"][:,0]
        tmp["B"][:,2]=data["D"][::-1,0]
        tmp["L"][:,:]=cw(data["L"])
    elif op=="D":
        tmp["F"][2,:]=data["L"][2,:]
        tmp["R"][2,:]=data["F"][2,:]
        tmp["B"][2,:]=data["R"][2,:]
        tmp["L"][2,:]=data["B"][2,:]
        tmp["D"][:,:]=cw(data["D"])
    elif op=="M":
        tmp["F"][1,:]=data["L"][1,:]
        tmp["R"][1,:]=data["F"][1,:]
        tmp["B"][1,:]=data["R"][1,:]
        tmp["L"][1,:]=data["B"][1,:]
    #####################################
    elif op=="f":
        tmp["U"][2,:]=data["R"][:,0]
        tmp["R"][:,0]=data["D"][0,::-1]
        tmp["D"][0,:]=data["L"][:,2]
        tmp["L"][:,2]=data["U"][2,::-1]
        tmp["F"][:,:]=anti_cw(data["F"])
    elif op=="r":
        tmp["U"][:,2]=data["B"][::-1,0]
        tmp["B"][:,0]=data["D"][::-1,2]
        tmp["D"][:,2]=data["F"][:,2]
        tmp["F"][:,2]=data["U"][:,2]
        tmp["R"][:,:]=anti_cw(data["R"])
    elif op=="u":
        tmp["R"][0,:]=data["F"][0,:]
        tmp["F"][0,:]=data["L"][0,:]
        tmp["L"][0,:]=data["B"][0,:]
        tmp["B"][0,:]=data["R"][0,:]
        tmp["U"][:,:]=anti_cw(data["U"])
    elif op=="b":
        tmp["R"][:,2]=data["U"][0,:]
        tmp["U"][0,:]=data["L"][::-1,0]
        tmp["L"][:,0]=data["D"][2,:]
        tmp["D"][2,:]=data["R"][::-1,2]
        tmp["B"][:,:]=anti_cw(data["B"])
    elif op=="l":
        tmp["B"][:,2]=data["U"][::-1,0]
        tmp["U"][:,0]=data["F"][:,0]
        tmp["F"][:,0]=data["D"][:,0]
        tmp["D"][:,0]=data["B"][::-1,2]
        tmp["L"][:,:]=anti_cw(data["L"])
    elif op=="d":
        tmp["L"][2,:]=data["F"][2,:]
        tmp["F"][2,:]=data["R"][2,:]
        tmp["R"][2,:]=data["B"][2,:]
        tmp["B"][2,:]=data["L"][2,:]
        tmp["D"][:,:]=anti_cw(data["D"])
    elif op=="m":
        tmp["L"][1,:]=data["F"][1,:]
        tmp["F"][1,:]=data["R"][1,:]
        tmp["R"][1,:]=data["B"][1,:]
        tmp["B"][1,:]=data["L"][1,:]
    mf.data=tmp
    return tmp
################
 
 
#############
 
mf=MF()
def moves(lst):
        for x in lst:
            move(mf.data,x)
def solve(data):
    tmp=cp.deepcopy(data)
    def judge_color(i,j):
        if mf.data["U"][i,j]==1:
            # print(mf.data["U"])
            move(mf.data,"U")
            judge_color(i,j)
        else:
            return None
    def step1():
        while not (mf.data["U"][0,1]==1 and mf.data["U"][1,0]==1 and mf.data["U"][2,1]==1 and mf.data["U"][1,2]==1):
            if mf.data["F"][1,2]==1:
                judge_color(1,2)
                move(mf.data,"R")
            elif mf.data["F"][1,0]==1:
                judge_color(1,0)
                move(mf.data,"l")
            elif mf.data["F"][0,1]==1 or mf.data["F"][2,1]==1:
                judge_color(2,1)
                move(mf.data,"F")
            elif mf.data["B"][1,0]==1:
                judge_color(1,2)
                move(mf.data,"r")
            elif mf.data["B"][1,2]==1:
                judge_color(1,0)
                move(mf.data,"L")
            elif mf.data["B"][0,1]==1 or mf.data["B"][2,1]==1:
                judge_color(0,1)
                move(mf.data,"B")
            elif mf.data["L"][1,0]==1:
                judge_color(0,1)
                move(mf.data,"b")
            elif mf.data["L"][1,2]==1:
                judge_color(2,1)
                move(mf.data,"F")
            elif mf.data["L"][0,1]==1 or mf.data["L"][2,1]==1:
                judge_color(1,0)
                move(mf.data,"L")
            elif mf.data["R"][1,0]==1:
                judge_color(2,1)
                move(mf.data,"f")
            elif mf.data["R"][1,2]==1:
                judge_color(0,1)
                move(mf.data,"B")
            elif mf.data["R"][0,1]==1 or mf.data["R"][2,1]==1:
                judge_color(1,2)
                move(mf.data,"R")
            elif mf.data["D"][0,1]==1:
                judge_color(2,1)
                move(mf.data,"F")
                move(mf.data,"F")
            elif mf.data["D"][1,0]==1:
                judge_color(1,0)
                move(mf.data,"L")
                move(mf.data,"L")
            elif mf.data["D"][1,2]==1:
                judge_color(1,2)
                move(mf.data,"R")
                move(mf.data,"R")
            elif mf.data["D"][2,1]==1:
                judge_color(0,1)
                move(mf.data,"B")
                move(mf.data,"B")
    def step2():
        while not (mf.data["D"][0,1]==1 and mf.data["D"][1,0]==1 and mf.data["D"][2,1]==1 and mf.data["D"][1,2]==1):
            if mf.data["U"][1,2]==1 and mf.data["R"][0,1]==mf.data["R"][1,1]:
                move(mf.data,"R")
                move(mf.data,"R")
            elif mf.data["U"][2,1]==1 and mf.data["F"][0,1]==mf.data["F"][1,1]:
                move(mf.data,"F")
                move(mf.data,"F")
            elif mf.data["U"][1,0]==1 and mf.data["L"][0,1]==mf.data["L"][1,1]:
                move(mf.data,"L")
                move(mf.data,"L")
            elif mf.data["U"][0,1]==1 and mf.data["B"][0,1]==mf.data["B"][1,1]:
                move(mf.data,"B")
                move(mf.data,"B")
            else:
                move(mf.data,"U")
    def eq(lst):
            assert len(lst)==3
            if lst[0]==lst[1] and lst[1]==lst[2]:
                return True
            return False
    formula={"left":"ulUL","right":"URur","yizi":"RUrurFRf","guaijiao":"FRuruRUrf","lfish":"luLuluuL","rfish":"RUrURUUr"}
    def step3():
        while not (eq(mf.data["D"][0,:]) and eq(mf.data["D"][:,2]) and eq(mf.data["D"][2,:]) and eq(mf.data["D"][:,0]) and
                    eq(mf.data["F"][2,:]) and eq(mf.data["L"][2,:]) and eq(mf.data["R"][2,:]) and eq(mf.data["B"][2,:])):
            if mf.data["F"][0,0]==1:
                color1=mf.data["U"][2,0]
                color2=mf.data["L"][0,2]
                if color1==mf.data["F"][1,1] and color2==mf.data["L"][1,1]:
                    moves(formula["left"])
                else:
                    moves("MD")
            elif mf.data["F"][0,2]==1:
                color1=mf.data["U"][2,2]
                color2=mf.data["R"][0,0]
                if color1==mf.data["F"][1,1] and color2==mf.data["R"][1,1]:
                    moves(formula["right"])
                else:
                    moves("MD")
            elif mf.data["L"][0,0]==1 or mf.data["L"][0,2]==1:
                moves("u")
            elif mf.data["R"][0,0]==1 or mf.data["R"][0,2]==1:
                moves("U")
            elif mf.data["B"][0,0]==1 or mf.data["B"][0,2]==1:
                moves("UU")
            
            elif mf.data["F"][2,2]==1:
                moves(formula["right"])
            elif mf.data["F"][2,0]==1:
                moves(formula["left"])
            elif mf.data["L"][2,0]==1 or mf.data["L"][2,2]==1:
                moves("MD")
            elif mf.data["R"][2,0]==1 or mf.data["R"][2,2]==1:
                moves("md")
            elif mf.data["B"][2,0]==1 or mf.data["B"][2,2]==1:
                moves("MMDD")
            
            elif mf.data["U"][2,0]==1:
                if mf.data["L"][0,2]==mf.data["F"][1,1] and mf.data["F"][0,0]==mf.data["L"][1,1]:
                    moves(formula["left"])
                else:
                    moves("MD")
            elif mf.data["U"][2,2]==1:
                if mf.data["R"][0,0]==mf.data["F"][1,1] and mf.data["F"][0,2]==mf.data["R"][1,1]:
                    moves(formula["right"])
                else:
                    moves("MD")
            elif mf.data["U"][0,0]==1:
                moves("u")
            elif mf.data["U"][0,2]==1:
                moves("U")
 
            elif mf.data["D"][0,0]==1 and not (mf.data["F"][2,0]==mf.data["F"][2,1] and mf.data["L"][2,1]==mf.data["L"][2,2]):
                moves(formula["left"])
            elif mf.data["D"][0,2]==1 and not (mf.data["F"][2,1]==mf.data["F"][2,2] and mf.data["R"][2,0]==mf.data["R"][2,1]):
                moves(formula["right"])
            elif mf.data["D"][2,0]==1 and not (mf.data["B"][2,1]==mf.data["B"][2,2] and mf.data["L"][2,0]==mf.data["L"][2,1]):
                moves("MMDD")
            elif mf.data["D"][2,2]==1 and not (mf.data["B"][2,0]==mf.data["B"][2,1] and mf.data["R"][2,1]==mf.data["R"][2,2]):
                moves("MMDD")
    def dt(face_x_y):
        return mf.data[face_x_y[0]][int(face_x_y[1]),int(face_x_y[2])]
    def step4():
        uMD_cnt=0
        while not (eq(mf.data["F"][1,:]) and eq(mf.data["L"][1,:]) and eq(mf.data["R"][1,:]) and eq(mf.data["B"][1,:])):
            if dt("F01")==dt("F11") and dt("U21")==dt("R11"):
                moves(formula["right"]+"Umd"+formula["left"])
            elif dt("F01")==dt("F11") and dt("U21")==dt("L11"):
                moves(formula["left"]+"uMD"+formula["right"])
            elif dt("F11")==dt("L01"):
                moves("u")
            elif dt("F11")==dt("R01"):
                moves("U")
            elif dt("F11")==dt("B01"):
                moves("UU")
            elif uMD_cnt<5:
                uMD_cnt+=1
                moves("uMD")
            else:
                uMD_cnt=0
                while dt("F11")==dt("F12") and dt("F11")==dt("F10"):
                    moves("MD")
                if dt("F11")!=dt("F12"):
                    moves(formula["right"]+"Umd"+formula["left"])
                elif dt("F11")!=dt("F10"):
                    moves(formula["left"]+"uMD"+formula["right"])
    def step5():
        while not (eq(mf.data["U"][1,:]) and eq(mf.data["U"][:,1])):
            if eq(mf.data["U"][1,:]) and dt("F01")==dt("U11"):
                moves(formula["yizi"])
            elif dt("U01")==dt("U11") and dt("U10")==dt("U11") and dt("F01")==dt("U11") and dt("R01")==dt("U11"):
                moves(formula["guaijiao"])
            elif dt("F01")==dt("U11") and dt("R01")==dt("U11"):
                moves(formula["yizi"])
            else:
                moves("U")
    def step6():
        cnt=0
        while not (eq(mf.data["U"][0,:]) and eq(mf.data["U"][1,:]) and eq(mf.data["U"][2,:]) and eq(mf.data["U"][:,0])):
            lst=[dt("U00"),dt("U02"),dt("U20"),dt("U22")]
            SUM=0
            for x in lst:
                if x!=dt("U11"):
                    SUM+=1
            if dt("U20")==dt("U11") and dt("F02")==dt("U11") and dt("R02")==dt("U11") and dt("B02")==dt("U11"):
                moves(formula["rfish"])
            elif dt("U22")==dt("U11") and dt("F00")==dt("U11") and dt("L00")==dt("U11") and dt("B00")==dt("U11"):
                moves(formula["lfish"])
            elif SUM==3:
                moves("U")
            else:
                while dt("F00")!=dt("U11"):
                    moves("U")
                moves(formula["rfish"])
    def step7():
        while True:
            SUM=0
            for x in "FRBL":
                if dt(x+"00")==dt(x+"02"):
                    SUM+=1
            if SUM>=2:
                break
            if SUM==0:
                while dt("F00")==dt("F02") or dt("F00")==dt("L00") or dt("L00")==dt("F02"):
                    moves("U")
                moves(formula["guaijiao"]+formula["yizi"])
            elif SUM==1:
                while dt("L00")!=dt("L02"):
                    moves("U")
                moves(formula["yizi"]+formula["guaijiao"])
    def step8():
        while True:
            SUM=0
            for x in "FRBL":
                if eq(mf.data[x][0,:]):
                    SUM+=1
            if SUM==4:
                while dt("F00")!=dt("F11"):
                    moves("U")
                break
            if SUM==0:
                moves(formula["lfish"]+"u"+formula["rfish"])
            elif SUM==1:
                while not eq(mf.data["B"][0,:]):
                    moves("U")
                while not eq(mf.data["B"][:,0]):
                    moves("MD")
                if dt("L01")==dt("F11"):
                    moves(formula["lfish"]+"u"+formula["rfish"])
                elif dt("R01")==dt("F11"):
                    moves(formula["rfish"]+"U"+formula["lfish"])
        while dt("F11")!=4:
            moves("uMD")
    step1()
    print(len(OPPS))
    step2()
    print(len(OPPS))
    step3()
    print(len(OPPS))
    step4()
    print(len(OPPS))
    step5()
    print(len(OPPS))
    step6()
    print(len(OPPS))
    step7()
    print(len(OPPS))
    step8()
    return True
if __name__ == "__main__":
    app = QApplication(sys.argv)
    example=Example()
    example.show()
    ops=["F","R","U","B","L","D"]
 
    TIME=0
    for t in range(1):
        OPPS=""
        shuffle=""
        seed=np.random.randint(1,1000000)
        np.random.seed(seed)
        print("seed",seed)
        for i in range(50):
            shuffle+=ops[np.random.randint(0,len(ops))]
        moves(shuffle)
        time1=time.time()
        solve(mf.data)
        time2=time.time()
        TIME+=(time2-time1)
        print("打乱公式:",shuffle)
        print("求解公式:",OPPS[len(shuffle):])
        print("求解步数:",len(OPPS[len(shuffle):]))
        print(t,TIME)
    app.exec_()
 

谢谢观看


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部