QQ登录

只需要一步,快速开始

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

深度优先搜索解决迷宫难题

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

1192

主题

4

听众

2946

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2023-12-22 17:11 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
为大家分享一个代码,该代码是使用升读优先搜索解决迷宫难题2 w( c6 L1 }' H; T" H, {# s  I

, O. P1 K6 m, B' L  Z) `; A当调用[total,maze]=search(1,1,maze,total);时,会从(1, 1)这个位置开始,在给定的迷宫maze上执行深度优先搜索。下面是对代码的逐行解释:, o7 b' k6 Q! r# P4 @

7 v1 f5 b( w; M' _1.function [total,maze]=search(i,j,maze,total);) `) e) i- ?1 L/ _0 k* a

+ T- n* `& n# w' l, \# M
8 l. `% h" `5 Y# {2 P; J! {4 y2.定义了一个函数search,该函数接受当前位置(i, j)、迷宫maze和解的数量total作为输入参数,并返回更新后的total和maze。
4 X/ V1 r7 G! @* t/ e2 B0 L- D/ g% }( E- ]/ B# J

! Q- Y! b1 R; Q( T+ k3.fx(1:4)=[0,1,-1,0];
3 A: b& g5 Z: |8 Y) ^& Z7 S
' a% |* }' ]! A* |+ r5 g1 K% G6 n1 S7 _# J
4.定义了一个包含四个元素的数组fx,表示在行方向上的四个可能的移动。# q0 ]3 C4 H7 b' ^
! z$ h( s9 a, [( c6 [2 l! ]
- {1 {4 H( j2 e0 x" a$ d& f0 |
5.fy(1:4)=[1,0,0,-1];9 N8 S" p3 o& L

8 h! t! g% \# C$ A* h& ^
: p# ]8 h: n4 o6.定义了一个包含四个元素的数组fy,表示在列方向上的四个可能的移动。
& {) m2 @9 Q$ Y3 @+ z" A* S( F3 A# D; l1 ?3 l
5 L3 b1 f( V4 q2 f  {* d& ?
7.for k=1:4
6 Z$ F" [; ^( s: h/ C/ r0 X# ~. a' k/ [7 B* _' _8 w$ H8 q$ N

% C4 T6 k# C  N) T. O- K# p8.开始一个循环,遍历四个可能的移动方向。' K$ _) l+ O# E1 f& }+ ^
  U6 U/ f7 K# [5 S* K
$ z9 |# u$ i; w% w3 G
9.newi=i+fx(k);2 e/ l( D' I* u+ q

9 U" \# _" n. b3 y
5 K; L$ N4 K& d( A8 G1 |10.根据当前位置(i, j)和移动方向计算新的行坐标newi。
3 \3 K/ V* z, y* e$ z5 n4 H5 s2 L( t- q8 P% n# |
0 t' O/ O9 a: U2 _. N3 l( M
11.newj=j+fy(k);
7 M; E) {9 t. \9 [! W! l/ t/ a7 K- z7 e+ J
- @+ r0 o1 ]. N- d: W$ d
12.根据当前位置(i, j)和移动方向计算新的列坐标newj。
9 Z, j9 ~1 \$ r0 o( g/ |5 z2 G& S7 M2 s! T

9 i- U1 ]4 S) V1 l' E) D13.if (newi<=8)&(newj<=8)&(newi>=1)&(newj>=1)&maze(newi,newj)==0
1 g, {8 V& j+ f# w& C3 S& g; p0 M% R  [9 q/ I
8 _: l4 }( s, @' S- C) ^7 l$ Z
14.检查新的位置(newi, newj)是否在迷宫范围内且是可行的(即迷宫中的值为0,表示可以走)。# _0 U; H1 @7 y) M# v& n/ a
# m; R% y7 M& G7 F/ P& S& ^% \

; w+ U; V+ T' W& w, S# h% L) D0 E15.maze(newi,newj)=3;6 E5 c- e7 L4 _2 U6 s+ d  C' l, n# z

0 N) P3 O5 N0 ?7 m: k) N8 Y8 Z: V1 S+ p
16.将迷宫中新的位置标记为3,表示已经走过。7 W/ f. q1 e4 H! e, a! |8 O5 C
6 Y5 X; h3 P5 n4 u5 c1 w
$ A! t% G2 w" Z6 Y3 E  G, u! B9 j1 p
17.if newi==8&newj==8
1 e/ j( Q3 t% Y
/ D( a) S7 |3 I3 W9 u( S  Z9 m; {. v5 @
18.如果新的位置是终点(8, 8),则增加解的数量total,显示当前迷宫maze,并结束递归。
1 Y# l. ], v, F' v, y
/ {3 k$ t& @' N! B: A2 q+ o7 Z+ D9 i
19.total=total+16 B) B* L9 z3 ^, H
" U) n) t5 _, p/ |% f: P4 s7 s7 G
20.增加解的数量。; F. B+ N, p; ?+ [
21.maze
# M. M& m9 ^+ Z
1 i0 a) n7 K7 @( f22.显示当前的迷宫状态。+ u' d3 S6 v9 u; I$ x5 K: i! y
23.else
; V- {3 M3 |) D' i1 X4 w* @, I8 T, P; p4 b% N. Q
24.如果新的位置不是终点,执行下面的语句。
+ q3 H" g# `# D7 f0 B0 y( s8 \4 m! `. u25.[total,maze]=search(newi,newj,maze,total);3 i" z6 }0 E$ y/ }" X# X+ f& l
; N" J% w) a6 C$ O; E" a
26.递归调用search函数,以新的位置(newi, newj)为起点进行搜索。
& B& n9 p/ V& Z! W27.end
) |1 R+ @( S& F) u. T' F' H( E* ^
9 d: l0 q+ Y5 e5 F* _) m28.结束if语句。
; U0 u) H. ^) _) [8 ]0 G29.end
: S: W: A( h4 Q+ l# x
1 R2 Q: j( @% H% t; {$ b! e, e7 l30.结束for循环。
7 j+ k% H3 _& I+ `2 _) w, t31.maze(i,j)=2;4 U! C! }% y4 ]( h$ `. h2 u
8 l" ?6 F, n# E& m# Y9 E
32.如果所有可能的移动都被尝试过,将当前位置标记为2,表示当前路径是死路。$ b5 x, M/ K7 a. F9 c! F- A
33.end
- {% u5 p% V7 o; p, j. o  }# L
. @+ ~* ]4 b! X+ v34.结束search函数。
2 P8 y4 l8 f: ~2 E8 S35.clear all
/ D" f8 E8 u9 s9 M  d( Y: J1 m5 L3 H! D/ ~" D# j0 _/ ]
36.清除工作区中的所有变量。
4 ]7 c2 ]6 S4 I: ?/ J  W0 X37.clc
+ y! Q% L& _1 a) L! o9 a/ C1 N% d& n  ]" f) x# z
38.清空命令窗口。
+ K7 C* r4 a0 W3 U, i39.定义了一个8x8的迷宫maze,其中0表示路,1表示墙。
4 l; g* w- \- a. o! Y40.total=0;
- n8 |- l: D6 I" `' [" w: q; j  G( M* m* a0 Q* C. Q% a9 G7 c
41.初始化解的数量。" a. i+ n9 F" d$ A8 Z3 e$ |8 I
42.maze(1,1)=3;, A# _) H, c; a# i2 q1 `
. t( j! W8 Y% Z* L
43.将起始位置标记为3,表示已经走过。
/ m5 c2 c" T) _* c$ B& B0 n44.[total,maze]=search(1,1,maze,total);. Z7 [+ f  I% h, k' ]# f8 E

0 H& Z1 A; B- a- y7 H( x- @9 G2 K4 W45.调用search函数开始深度优先搜索。1 O2 r; a$ Q( o' N+ p( p1 ?( ?

7 A7 d% {& s8 R. c5 i整个过程是通过递归实现深度优先搜索,尝试从起始位置到达终点,并记录所有可能的解。在搜索过程中,迷宫中的可行路径被标记为3,死路被标记为2。搜索结束后,会显示解的数量和每个解对应的迷宫状态。
4 D2 }6 B/ c( [6 Q
: m$ _! P5 I  I% w0 e3 j7 ^1 X+ z# F0 p1 n" F8 g
$ l, |3 Q- w9 y

% D; b$ W- G6 ^& {& f9 S
9 ]( G5 x3 w( n" Y$ F4 \/ b8 Z8 z

深度优先搜索.rar

637 Bytes, 下载次数: 0, 下载积分: 体力 -2 点

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

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-26 00:38 , Processed in 0.787941 second(s), 55 queries .

回顶部