首页 > 编程知识 正文

八数码问题广度搜索,八数码问题状态数

时间:2023-05-06 17:38:56 阅读:112560 作者:2980

数据结构(三十一)学习数据结构和算法过程中的心得体会和知识点整理,方便我自己找,希望能和大家一起交流。

——八数字难题—— 1.题目记述八数字问题又称九宫问题。 33的棋盘上,放着8个棋子,每个棋子上有1到8的数字,根据棋子的不同,数字也不同。 棋盘上还有另一个空间,与空间相邻的棋子可以移动到空间中。 需要解决的问题是,给出初始状态和目标状态,找出从初始状态迁移到目标状态的棋子的移动步数最少的移动步。

代码使用算法:启发式搜索算法

点击这里使用广度搜索算法求解

python

importcopyimportnumpyasnpdefstring _ to _ ls (str ) : return [i.split (' ) for i in str.split ) ',' ]defget_。 cforiinarr 3360 for Jini : ifj==target 3360 return arr.index ) I ),I.index(j ) defget _ elements (arr ) : r,c='0' ) elements=[ ] IFR 0: elements.append (arr [ r-1 ] [ c ] )上的元素IFR 2: elements.append (R1 ] [ c ] ) ) )左侧元素IFC 2: elements.append (arr [ r ] [ C1 ] )右侧元素returnelements e ) :ARR_new=copy.deepcopy(arr ) r,c=gern C1=get_loacl ) arr _ new arr _ new [ r ] [ c ] return arr _ newdefget _ distance (arr 1,arr2) : distance=[ ] fore j ) distance.append ) ABS ) LOC1[0]-loc2[0] ) ABS ) LOC1[1]-loc2[1] ) ) retter goal ) 3360 return arr===goaa distance(:#state为3x3的ls矩阵self.state=state self.deep=deep self.parent=parent self.distance=distancedefchch forIinget_elements(self.state ) : child=state (state=get _ child ) self.state,I ),dee een distance=stance=se goal_arr () chidren.append(child ) return chidrendef print_path(n ) n ) : IFN.parent==none : return else : th ) n.parent ) if _ name _=' _ _ main _ ' 3360 inining 75 ' initial _ arr=string _ to _ ls (initial ) goal ce(initial_arr, goal_arr () open=[ initial _ arr ] close=[ ] limit=19 while len (open ) 03360 open _ TB=[ I.stateforinopen ] clen goal_arr(:print(NP.Array ) n.state ) print_path(n ) n ) break else : IFN.deep limit 3360 fori in.chidrered

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。