哎,好久没写博文了,其实仔细想来,时间还是蛮多的,以后还是多写写吧!
之前看过经典的搜索路径方法,印象较深的也就BFS(广度优先),DFS(深度优先)以及A*搜索,但没实践过,就借八数码问题,来通通实现遍,观察下现象呗~~~
首先,怎么说也得把数码这玩意基本操作实现了呗!上代码~
class puzzled:
def __init__(self,puzzled):
self.puzzled=puzzled
self.__getPuzzledInfo()
def __getPuzzledInfo(self):
self.puzzledWid=len(self.puzzled[0])
self.puzzledHei=len(self.puzzled)
self.__f1=False
for i in range(0,self.puzzledHei):
for j in range(0,self.puzzledWid):
if(self.puzzled[i][j]==0):
self.zeroX=j
self.zeroY=i
self.__f1=True
break
if(self.__f1):
break
def printPuzzled(self):
for i in range(0,len(self.puzzled)):
print self.puzzled[i]
print ""
def isRight(self):
if(self.puzzled[self.puzzledHei-1][self.puzzledWid-1]!=0):
return False
for i in range(0,self.puzzledHei):
for j in range(0,self.puzzledWid):
if(i*self.puzzledWid+j+1!=self.puzzled[i][j]):
if(i!=self.puzzledHei-1 or j!=self.puzzledWid-1):
return False
return True
def move(self,dere):#0 up,1 down,2 left,3 right
if(dere==0 and self.zeroY!=0):
self.puzzled[self.zeroY-1][self.zeroX],self.puzzled[self.zeroY][self.zeroX] = self.puzzled[self.zeroY][self.zeroX],self.puzzled[self.zeroY-1][self.zeroX]
self.zeroY-=1
return True
elif(dere==1 and self.zeroY!=self.puzzledHei-1):
self.puzzled[self.zeroY+1][self.zeroX],self.puzzled[self.zeroY][self.zeroX] = self.puzzled[self.zeroY][self.zeroX],self.puzzled[self.zeroY+1][self.zeroX]
self.zeroY+=1
return True
elif(dere==2 and self.zeroX!=0):
self.puzzled[self.zeroY][self.zeroX-1],self.puzzled[self.zeroY][self.zeroX] = self.puzzled[self.zeroY][self.zeroX],self.puzzled[self.zeroY][self.zeroX-1]
self.zeroX-=1
return True
elif(dere==3 and self.zeroX!=self.puzzledWid-1):
self.puzzled[self.zeroY][self.zeroX+1],self.puzzled[self.zeroY][self.zeroX] = self.puzzled[self.zeroY][self.zeroX],self.puzzled[self.zeroY][self.zeroX+1]
self.zeroX+=1