QQ登录

只需要一步,快速开始

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

python 解决八数码问题

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-20 11:44 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
题目描述】
; G8 _3 I' n8 P7 G4 F( Q3 O# j, D7 Q
        在一个 3×3 的网格中,1∼8这 8 个数字和一个 x 恰好不重不漏地分布在这 3×3的网格中。; `/ s0 U  q% L% J  e- Y# ]3 A2 k

$ F  w+ y5 I. Y! E$ {* v, _( w例如:
9 @# P( K. v' \  u" w+ @% s6 A( ^) f3 g4 Q) i
1 2 3+ Y- Q+ E1 X: \5 R: B, c, W' e
x 4 6$ s7 |1 S' `7 p1 u! j
7 5 8: O' I5 X3 A% W3 t& a
        在游戏过程中,可以把 x 与其上、下、左、右四个方向之一的数字交换(如果存在)。我们的目的是通过交换,使得网格变为如下排列(称为正确排列):/ h1 K  T0 g* h$ d. l2 r# b
2 p; |! z4 f0 T
1 2 3
* U5 t$ _6 O* J/ Z6 z/ K8 _4 f" K4 5 6' k" l# f4 l) A9 P* Q
7 8 x0 d/ c; e- c; w, L
        例如,示例中图形就可以通过让 x 先后与右、下、右三个方向的数字交换成功得到正确排列。交换过程如下  K4 C7 P3 O, M3 N9 }' n! M# `$ y/ A

- x. \! N6 R- |. m: a1 2 3   1 2 3   1 2 3   1 2 3/ A" t3 D. F1 p; L
x 4 6   4 x 6   4 5 6   4 5 6
) i1 j- B, s5 O9 i; T- ?7 5 8   7 5 8   7 x 8   7 8 x; ?4 ^( j# s5 u6 `
         把 x 与上下左右方向数字交换的行动记录为 u、d、l、r。现在,给你一个初始网格,请你通过最少的移动次数,得到正确排列。
* s) w$ b0 Z- r6 e: j/ v. ?' d( G5 |8 v1 w( V; f. I* }
【输入格式】& P! h) W. u5 O8 v2 I# \
. W, x$ _# ^- H' _& S7 [' s) i' Z
        输入占一行,将 3×3 的初始网格描绘出来。例如,如果初始网格如下所示:) F2 U; X. f' }! k5 A) d
. ?2 s( z% j/ d' l1 p: a
1 2 3
0 `: O, \' Y* T) r9 q: P9 X) N  w* zx 4 6 $ s( Z( ~2 Y; B+ ~
7 5 8 & ~3 y5 D6 J* u
        则输入为:1 2 3 x 4 6 7 5 89 p9 e/ g1 c+ j( d( l0 o
3 y( Q9 r8 i( \# {9 ~0 g
【输出格式】$ I* G5 l2 Y8 Z2 M3 x
% @/ o; W6 Q$ \+ y! }9 D
        输出占一行,包含一个整数,表示最少交换次数。
- ?7 |2 Q2 a4 W8 s2 {2 v# I8 o2 o% y* c; K
& G8 f% ^0 r; t        如果不存在解决方案,则输出 −1。
5 ?& h. |% |" j! s, e
0 F* \7 y1 n; w0 [9 y【输入样例】
6 s' {+ K! j& j$ T/ v, ^* h2 m; P9 t3 R2 [1 ]$ n" C: r- W
2 3 4 1 5 x 7 6 8/ p6 ?; g; r; v0 r: C* m
【输出样例】3 Y0 Z1 x1 i# R2 t, p) B! e

" B. V) y9 n6 X& ?1 l9 H0 D% l$ A19
  n$ O( x% i4 @: |【解题思路】5 {9 q- `/ p0 r* \/ L9 Y

# f; \; f) Z4 |  J* @/ z1 `# f; G9 Y        简答题,用BFS遍历查找即可。
: V8 W( f1 R: d1 f' q3 F9 C& W4 g$ T; C1 f3 i" o0 k3 r
【Python程序代码】, M1 R4 k& }- V; |' N# q# n+ J
8 d' I# P& R7 e8 x! D3 f
from collections import *
( ~; G# T$ |1 k$ k0 N* N9 apd = ['0','1','2','3','4','5','6','7','8','x']
& W3 {% \2 y! B, I- E" M) A  ]$ Z  Inorm = "".join(pd)
2 V& i; `5 v. Jdir = [1,-1,3,-3]
1 f% O3 w7 A6 L4 c2 @1 es = ['0'] + list(map(str,input().split()))
2 o) j5 i8 G; W. n% c5 A; z2 n  jidx = s.index('x')
, e6 h9 U" U/ Y0 A4 @! f2 `mp = defaultdict(int)) F& M5 j7 O/ |8 C1 o2 [# L7 g
def bfs():/ n( K2 i7 `& I% g
    q = deque()
% `1 X: f/ v1 x5 G$ x, c    step = 04 t' O: l1 a( e& X5 }( z- G# f
    q.append( [s,idx,step] )
0 w3 G9 ]# V, {9 [; u! P    ns = "".join(s)2 X- n7 \) ?  T& c9 Z* L
    mp[ns]=1- z: [4 M+ `2 X$ y0 ]
    flag,res = 0,-14 y6 A* W2 s* j' u9 l1 P6 F8 E
    while q:
, `8 @. T- K8 x, Z" J0 y        ss,sidx,step = q.popleft()
; x# z3 g2 N" W$ q3 K        if "".join(ss)==norm:& ^$ g' y2 Y& E: B: G: ?
            res = step, Y  W/ U4 W  g% Z3 S  n
            break
0 E& q6 t" u  c5 Y5 q9 O        for i in dir:
. n5 C$ `# C4 F( J4 }6 H4 e            teps = ss.copy()" I/ ^0 W/ q6 e
            nidx = sidx + i6 P2 I, z3 ?2 d& }1 h) p6 H
            if nidx<1 or nidx>9:continue% h6 W* O; s; T% M
            if (sidx==3 or sidx==6) and i==1:continue7 I% k, A8 E- x+ y6 h7 ]" Y& V
            if (sidx==4 or sidx==7) and i==-1:continue
' h3 `$ l" w+ z8 _  _            teps[sidx],teps[nidx] = teps[nidx], teps[sidx]
0 [+ X' v# k% H  ]            nteps = "".join(teps)1 v! S' m3 v( }8 A# i7 R5 I9 X
            if  mp[nteps]:continue9 v1 o( e) x  l2 Z
            mp[nteps]=1
% i$ D# ^& f+ Y* k( z            q.append( [teps,nidx,step+1] ); l9 l' {, }. {
    print(res)6 k: F( b% Z) b6 H  L7 B
bfs()
! x; O& W; H) v+ C: {; u+ |$ t: n8 S2 U6 \
# f5 }  O) u4 s5 N1 t: j* @

# G' u0 a# r& s" w
: ?9 T5 }9 e; J8 Q9 C  i  J5 o8 `
/ r3 B/ V$ c2 b3 c/ P( k1 W

代码.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-8-4 16:41 , Processed in 0.391002 second(s), 55 queries .

回顶部