QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2891|回复: 0
打印 上一主题 下一主题

python 解决八数码问题

[复制链接]
字体大小: 正常 放大

1198

主题

4

听众

2977

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-20 11:44 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
题目描述】- G( W# D% l* H7 X
; _" y$ ^. F& u, u: y) z' L
        在一个 3×3 的网格中,1∼8这 8 个数字和一个 x 恰好不重不漏地分布在这 3×3的网格中。
0 j6 ]) f6 \7 I* k$ ]& D' f& x+ O
例如:: Y; r9 W& O. S6 t) G5 t
4 C7 N8 P7 C. ~) X
1 2 3
6 J6 M$ F' k; z' S" ^6 `4 H( \x 4 6
$ h6 @1 I- R! j9 `/ c7 P" y: D/ }7 5 8+ `  ^6 l5 P/ B& H& B$ e$ z
        在游戏过程中,可以把 x 与其上、下、左、右四个方向之一的数字交换(如果存在)。我们的目的是通过交换,使得网格变为如下排列(称为正确排列):
1 [* y$ C1 X% a' C1 Y% J% k% T+ t7 k/ t' E+ g
1 2 3& u$ b0 w8 n/ d( S3 y
4 5 6+ P6 {& @7 S- C4 R- X0 e3 G1 p
7 8 x0 N2 H; d1 l$ h- Y+ X  q$ v/ I
        例如,示例中图形就可以通过让 x 先后与右、下、右三个方向的数字交换成功得到正确排列。交换过程如下3 a4 p6 }0 y, Q4 t1 w: o
) b! }0 U, M  x  g
1 2 3   1 2 3   1 2 3   1 2 3
7 o* r3 q) l2 _& R$ {$ ?$ g+ Tx 4 6   4 x 6   4 5 6   4 5 62 e% `/ G8 L3 v
7 5 8   7 5 8   7 x 8   7 8 x* G6 |9 V0 T1 {2 w9 }" G
         把 x 与上下左右方向数字交换的行动记录为 u、d、l、r。现在,给你一个初始网格,请你通过最少的移动次数,得到正确排列。
% k. K) D8 K9 V, e5 N, M
4 Y; C/ k, L: \; \: a8 A+ p【输入格式】7 U$ w! z# W& l' s, U4 ?3 x' Z/ I
8 _- _% ~3 h+ n. l) q/ u2 h
        输入占一行,将 3×3 的初始网格描绘出来。例如,如果初始网格如下所示:" k, G' @4 c( i5 ^

2 w0 u+ [3 F0 [8 h3 ]1 2 3
: N* b( _; L) f" C$ X% K( m/ yx 4 6 , d1 j6 k+ q2 i/ U- j# k
7 5 8
! d0 Y% e# N  C& R        则输入为:1 2 3 x 4 6 7 5 8* x6 [# O. o6 `0 [( U) y  x- D

$ G/ l: f5 }1 a# g* M! E【输出格式】
: w: M0 j- m9 k% {: C; M( `- e& g; F0 I; x5 r% j0 X
        输出占一行,包含一个整数,表示最少交换次数。
7 E( i% ^7 I; F( j2 v0 q7 F1 B7 v# O$ M3 u5 S. g5 c: Y( ^7 l1 O
        如果不存在解决方案,则输出 −1。4 ~4 L3 }% [! C+ A5 U& r. f& M
2 ]" J7 Z1 w+ ^4 l3 F( o
【输入样例】6 p; v9 p* A9 K" B4 n) ~
, w3 ?  N9 c' ]- j
2 3 4 1 5 x 7 6 8
6 z2 E: l# r5 Z) z8 {& k7 j) j7 k【输出样例】
3 F5 J/ @- s3 x3 `
% ]! Q0 Q( r6 c6 J3 U* t19
5 D% F/ o6 @# B1 t+ w2 K【解题思路】
' M+ o% w: x+ @  g
6 d: ~* _: G5 q* F+ O        简答题,用BFS遍历查找即可。! |' S) c- h( {
: ]+ N" k5 }: ]
【Python程序代码】
" _: e% n/ }5 g& Z! d  n1 o1 e" D: [4 k' I  X
from collections import */ d- I; L& T4 M' _7 }1 h, d( m; U
pd = ['0','1','2','3','4','5','6','7','8','x']: o+ ~: B& u% v9 k5 A( h% {: A
norm = "".join(pd)" ^+ ~' f/ E+ s# S7 e# ]: q! c
dir = [1,-1,3,-3]* \8 X( d) f2 O% k+ V! Z5 q
s = ['0'] + list(map(str,input().split()))( y, d8 l- D' Z/ A; i3 k4 w  V
idx = s.index('x'): p) z6 S% D9 q; Y: w! x. F# Z
mp = defaultdict(int)6 j  Q& t4 @$ \/ h
def bfs():
2 X) R* m7 a6 U5 }    q = deque()
; o8 `$ Q' O9 `- }    step = 0, i% a4 Q9 O8 l- A, {
    q.append( [s,idx,step] )* V6 B! B4 j! @$ t5 m! r: s; M* |
    ns = "".join(s)
( {2 A6 S  j* O    mp[ns]=1
6 h! L. ~& ~$ K* c    flag,res = 0,-18 L$ O4 b% l% m, n' u5 K
    while q:# D/ Y1 V% Q, U
        ss,sidx,step = q.popleft(); B9 C- O  Z) ^/ G! q# M
        if "".join(ss)==norm:
0 z9 O) p0 N- s  k* I3 Y! Y, e            res = step
, V& v! z: b; M# l2 }5 o1 u" Q            break
9 ~& |" a5 ~/ I1 Z, B# C        for i in dir:
9 L/ ?: q# e: h  |( v            teps = ss.copy()
7 L# w: R8 {( r/ F+ y4 h# z, z            nidx = sidx + i
! {- L  i9 n6 {( j4 e  E            if nidx<1 or nidx>9:continue7 f/ ?" _- y. o8 E- v4 }1 s
            if (sidx==3 or sidx==6) and i==1:continue  c" K; a% R" B* ?" F) \+ H( w
            if (sidx==4 or sidx==7) and i==-1:continue
: u9 C8 n1 S( f5 x& D: a            teps[sidx],teps[nidx] = teps[nidx], teps[sidx]: S+ d) r: I8 s& K) @& r+ h
            nteps = "".join(teps)
& g/ j9 C2 n, Z1 S8 {' N            if  mp[nteps]:continue, N- [: u) X1 T# u" f0 `' D8 t2 F
            mp[nteps]=15 N4 g5 o( h1 ]6 {
            q.append( [teps,nidx,step+1] )
* F- {' P, l9 k( u% d    print(res)
' |) r9 u2 v& A( Y9 o. Ibfs()
% c0 |7 X& i! ]9 [4 ~7 c! h
+ a/ Q3 C. r5 ?1 S+ S" j8 K# U$ U1 M$ ?+ K5 \

" Y, h# O  S) |* |* b0 k
# v- d! C+ X6 R( B0 x0 v' J$ Q0 p7 Z9 D6 }+ e1 N9 I3 ~: M

代码.txt

2.23 KB, 下载次数: 0, 下载积分: 体力 -2 点

售价: 2 点体力  [记录]  [购买]

zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
您需要登录后才可以回帖 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2026-9-24 14:58 , Processed in 5.151459 second(s), 54 queries .

回顶部