QQ登录

只需要一步,快速开始

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

python 解决八数码问题

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

1176

主题

4

听众

2884

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-20 11:44 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
题目描述】
  M# r& o/ d" F" N0 I* J$ i( a" e& E# U/ {/ u6 z! ]
        在一个 3×3 的网格中,1∼8这 8 个数字和一个 x 恰好不重不漏地分布在这 3×3的网格中。
9 G, [6 Z1 \# r/ i; [( a0 _' b
1 X- g9 I4 l1 Q6 f; ^2 o0 ^例如:: U+ ^, U" X( `
- G& J7 I. u# s5 l7 S
1 2 3
  c+ ~( O/ P% w( c& I1 W7 Hx 4 6
- z. {% j2 y3 W, O: s" z7 5 8
1 e% u6 U* I7 ?0 c! a9 p) y  L        在游戏过程中,可以把 x 与其上、下、左、右四个方向之一的数字交换(如果存在)。我们的目的是通过交换,使得网格变为如下排列(称为正确排列):+ s# }# ^$ g9 L( w: Z
3 n6 |2 T3 b) p$ T
1 2 3
5 o, E9 y1 n- E0 J$ f, e4 5 6
; D# ~! E0 o1 \- h. z1 P7 8 x5 C) t' H3 k' t* [0 R: R/ _* S5 H
        例如,示例中图形就可以通过让 x 先后与右、下、右三个方向的数字交换成功得到正确排列。交换过程如下- ^5 ?8 u0 k6 _. c3 Q
/ h8 k) K# t8 x% _6 ~9 ~4 Q) b3 o
1 2 3   1 2 3   1 2 3   1 2 3
. a; x/ E. \% H7 V9 ]: |/ Z3 n2 Vx 4 6   4 x 6   4 5 6   4 5 6
* F" k) u2 Z5 D7 5 8   7 5 8   7 x 8   7 8 x- l% E. |  g1 n! U8 P
         把 x 与上下左右方向数字交换的行动记录为 u、d、l、r。现在,给你一个初始网格,请你通过最少的移动次数,得到正确排列。( O0 s4 p/ W3 g, c9 B' j

, P" s8 ]2 G3 ?& ?* l【输入格式】4 y. r0 D2 A& }) u* X& \) T

, ]) s9 {) [5 z% P        输入占一行,将 3×3 的初始网格描绘出来。例如,如果初始网格如下所示:) a9 F. @; ^- G& G" T+ K0 R

9 O; I3 C! W! \1 2 3
" h& Z& X* I. ]5 q  x; Q( z8 {x 4 6 & _0 ]% D! b  R8 k+ ]; ]0 e
7 5 8
9 j/ X" H: s  D* [# o" C        则输入为:1 2 3 x 4 6 7 5 8
9 e4 W5 z- Z0 G5 \4 y4 \: X2 l% G7 A+ v4 m. ~& D0 J- [
【输出格式】8 G( H6 A3 @" U( B
5 `7 D1 K) i/ z
        输出占一行,包含一个整数,表示最少交换次数。
5 o* ^% v7 P' t# f, ^5 ?% @! z0 Y5 i9 g9 u
        如果不存在解决方案,则输出 −1。
' Q* X1 Y7 P1 g/ c- l8 ~
3 ~3 \$ t7 y9 D6 a6 H: h& L【输入样例】
% b9 j2 q5 I( S# c( `7 q; A) V& K
; L9 w4 z; C2 _" e, h2 @4 n- N2 3 4 1 5 x 7 6 8
6 a" H5 M. D, _& k【输出样例】0 J) U1 e8 l! h" ?" j

* v& v+ c2 L% R3 P% t19
* p9 ^7 Z5 f0 f【解题思路】2 I! g# u+ B: c
: w8 F3 C3 ?. J7 T& ^/ I8 e
        简答题,用BFS遍历查找即可。
. S, K3 b0 P7 ]! \7 p
( b2 Y6 l4 y/ J% p【Python程序代码】. C# y& w; q9 p

, Z5 p! q+ ?4 G% ~from collections import *
* Y6 Q+ G2 q6 s" v. L/ ~pd = ['0','1','2','3','4','5','6','7','8','x']* L$ L1 }* `, Y6 n) v, \; l
norm = "".join(pd)2 H4 \% D  B* S7 h
dir = [1,-1,3,-3]
3 p/ e& j# o1 p0 t% w) x" p5 W' ~s = ['0'] + list(map(str,input().split()))% P" l+ [% r  g8 K; Y& e
idx = s.index('x')
* L$ D' c( [! i4 w1 `mp = defaultdict(int)- X5 H$ Z' F' W8 ^% k
def bfs():1 U) b3 Q8 V" X' r# C: p
    q = deque()- y9 D" s! f8 y: n/ e
    step = 0
1 l- V2 `/ ]0 ?0 l* l) C  ~    q.append( [s,idx,step] )
' y7 _& R6 S2 E0 @" F' \" L    ns = "".join(s); c% y5 d) F" |3 w
    mp[ns]=15 |4 q3 U% }: z; H9 K6 g* N- S
    flag,res = 0,-1
. T8 l. N" g6 W) j* x9 w    while q:
! Y  V% q: N5 y' N' b" T/ o4 C        ss,sidx,step = q.popleft()7 B/ m- M0 {3 C2 a8 M; p! U! H) [
        if "".join(ss)==norm:
/ i; A& N3 D9 Y% l9 a2 [- f) Y            res = step- e# M8 ~1 y9 g( c( S4 c3 z
            break& J: Q8 W' J: u3 X9 w
        for i in dir:; v) \; V2 W0 k9 F. T: m
            teps = ss.copy(), C9 X$ q+ \- A2 G- c. U- U
            nidx = sidx + i
5 P$ o- m/ |. I% k! @2 J; U  i            if nidx<1 or nidx>9:continue) z2 N# l0 L; ?$ o! ]) W
            if (sidx==3 or sidx==6) and i==1:continue
% l" R+ {, t1 e' z- h7 T            if (sidx==4 or sidx==7) and i==-1:continue2 I4 a  C7 D2 R6 i4 R
            teps[sidx],teps[nidx] = teps[nidx], teps[sidx]
' i. @& m# @) v7 O' `. C, c  J            nteps = "".join(teps)
1 q! Y- _4 n3 r9 ^            if  mp[nteps]:continue. F6 t8 W) e: I7 N: o
            mp[nteps]=1
, G7 Z& J% P! C" V: O            q.append( [teps,nidx,step+1] )! W7 \2 D- t6 j" |3 K) W
    print(res)
: a+ O1 P( B4 V5 n; l. tbfs()% i: L5 [, c7 N7 r

0 V( j8 k! U7 V2 j
2 u" G, i, c, r: w4 [# ~2 ~. _+ Z5 S& X* o) _. p$ t+ s3 K
: U: A/ m7 e* D
5 w+ U' t+ C' z4 _9 n5 B

代码.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, 2025-9-22 22:44 , Processed in 0.365989 second(s), 54 queries .

回顶部