QQ登录

只需要一步,快速开始

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

python 解决八数码问题

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

1198

主题

4

听众

2977

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-20 11:44 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
题目描述】4 e2 `  j5 @0 y4 B$ l* h: s6 o

0 q& ^3 k; X) f9 E        在一个 3×3 的网格中,1∼8这 8 个数字和一个 x 恰好不重不漏地分布在这 3×3的网格中。0 m6 G" t2 f7 p3 @% R4 k

9 I9 T! F  a; f8 f0 ]( D例如:' t( W' c# H$ h! v# B6 r
- j+ l% k% x( }3 h# t
1 2 3( h0 A: j0 {1 m4 ^; J
x 4 6
) Q; T5 x6 @0 ^0 m6 c2 y7 5 8( H  l- ^1 q& F# V
        在游戏过程中,可以把 x 与其上、下、左、右四个方向之一的数字交换(如果存在)。我们的目的是通过交换,使得网格变为如下排列(称为正确排列):
. w7 n1 V0 }% e$ d5 X" w8 H+ @8 E: J7 y# X5 @
1 2 3
- l4 C1 g  V) e% j9 w2 p0 t4 `" ]$ e4 5 69 J" I9 N+ x  k% K+ p% q
7 8 x
0 C6 R- D: q2 y: Y4 `) {3 L        例如,示例中图形就可以通过让 x 先后与右、下、右三个方向的数字交换成功得到正确排列。交换过程如下. t7 y2 t* }2 |  s. H
3 [# ~& a  X! j) Q: D( l
1 2 3   1 2 3   1 2 3   1 2 3
+ o2 p0 i+ Q: K" ?  a& O  Lx 4 6   4 x 6   4 5 6   4 5 6$ u& K0 z) N/ J9 B" J6 |
7 5 8   7 5 8   7 x 8   7 8 x
' X$ j* g. C: K: P( Q" V* y: d) R         把 x 与上下左右方向数字交换的行动记录为 u、d、l、r。现在,给你一个初始网格,请你通过最少的移动次数,得到正确排列。# D( K8 y& p4 b4 R  U

- u  ]! B, W4 D, Y: V【输入格式】
  u* x" L3 a; T  W) t, m: a4 t
8 |3 S1 W: L6 K3 s" O! c/ J$ ~" A        输入占一行,将 3×3 的初始网格描绘出来。例如,如果初始网格如下所示:* q( t8 d- t3 y7 k) P' M

8 y) G" t9 K! |1 2 3 1 f' s+ n9 m6 @; I4 K* \
x 4 6
8 R" ]* o& m  ?- w( _4 |% e7 5 8 ) {/ r2 m+ N" L+ }
        则输入为:1 2 3 x 4 6 7 5 8
0 t1 l0 ]/ U9 g4 O, Y* }9 i
2 T# s8 R) a* G& K【输出格式】
7 `  t/ `' t# K5 L# C
  `: l9 y2 U+ I( h        输出占一行,包含一个整数,表示最少交换次数。
) E( M# r9 u" h
1 p- _; |& z- e, J3 A        如果不存在解决方案,则输出 −1。! [" ?) u& L; r

* R# I# k" f, k8 T7 j【输入样例】
1 Q" d3 z, Y, w; i% W5 C
, U0 m, K7 b) I  B) S2 3 4 1 5 x 7 6 88 O( Y8 B6 R; }! j
【输出样例】
0 e! z, Q& i$ i+ g5 _0 O, \/ N* @  q6 M" P( \! m
19. N+ M8 I: q9 d3 C
【解题思路】
! O4 t3 A2 V; v) }5 p2 e' x1 U/ V7 ?4 |/ H
        简答题,用BFS遍历查找即可。* \( _/ v( M! w5 i' ^3 p+ @; I. }
- Q, L. ]" V& ~
【Python程序代码】
. [. L4 s6 L9 @: a- B( ^0 d8 I3 H6 N& Q+ m4 J2 _5 y
from collections import *
. o& x/ X5 t2 W; a5 A  r+ J  b: Bpd = ['0','1','2','3','4','5','6','7','8','x']
  o2 t; J8 X" @# s& ^% [norm = "".join(pd)/ s) n! Z. K2 }$ f; d/ P# J6 O. }
dir = [1,-1,3,-3]6 q; e9 A6 _. {: U! w( h
s = ['0'] + list(map(str,input().split()))
" E# A% ]. U7 q, i$ Y8 Y  q4 n1 nidx = s.index('x')# E  G; G+ y! ^6 ]% N: {  ?
mp = defaultdict(int)
; J, f! l6 G& _( z: q* A3 o0 Ydef bfs():0 }) G! l! r7 R4 e/ I' A
    q = deque()
, Q  e  r" q' T( j. Y# l% R    step = 0
! N) I& S( M. u. t    q.append( [s,idx,step] )
& J$ z  ~6 r  F0 ^    ns = "".join(s)
7 ?7 }; ?( x* N6 {- P5 U/ x    mp[ns]=1+ s/ ]' e/ q! b, Z. F1 b  a
    flag,res = 0,-1
  P3 t2 d  l6 `1 s& G( P    while q:
) S2 f  f# N- D0 S$ I  q        ss,sidx,step = q.popleft()# @; C  f  v. k" Q) r1 w
        if "".join(ss)==norm:
& H* Z8 R5 ^) p+ X# A4 U# F+ H  ~            res = step% ~: F! E# \' X( t3 o- b
            break" r- n- _9 W6 Z. H  m
        for i in dir:& f) R) H' E' @; B- z: ^7 S
            teps = ss.copy()' ?9 m* M8 A# K$ ~
            nidx = sidx + i9 c* N7 F  F% |" k1 g! I: E& ]
            if nidx<1 or nidx>9:continue( |& k6 E; X! ^, M5 @& m& I! b; ?
            if (sidx==3 or sidx==6) and i==1:continue' D* e4 Q9 |0 k$ R  U7 B( a6 ?
            if (sidx==4 or sidx==7) and i==-1:continue5 ^' j2 E+ t! `/ `2 v0 C# ^
            teps[sidx],teps[nidx] = teps[nidx], teps[sidx]. E; g5 n3 t2 f  H
            nteps = "".join(teps)
% _& x$ O( z/ o2 T4 a4 P            if  mp[nteps]:continue3 S! {$ o+ Y$ }9 }2 R# K9 P
            mp[nteps]=1
4 r  |# R* |+ I            q.append( [teps,nidx,step+1] )
; X8 M. S3 F9 D! }8 Z# `: q+ j7 D    print(res)# D6 S4 t/ @1 n6 ]8 c8 ~  m
bfs()
& }$ O/ [$ O& b  d9 H  h  j
2 n' I5 \& H( ~5 f* Z& K4 J; Y! [9 p- Y+ [1 j
$ `6 o0 n% o) ~7 P
- p1 u0 }& X$ _  z' {2 h0 C

. d+ ~$ j  ^$ l

代码.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-27 14:12 , Processed in 0.367908 second(s), 54 queries .

回顶部