QQ登录

只需要一步,快速开始

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

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

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

1186

主题

4

听众

2922

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2023-12-22 17:11 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
为大家分享一个代码,该代码是使用升读优先搜索解决迷宫难题
% \( f, T* L: n% Q0 P6 j/ J0 P& {
. k  r: z9 N) y5 c: }& O# c当调用[total,maze]=search(1,1,maze,total);时,会从(1, 1)这个位置开始,在给定的迷宫maze上执行深度优先搜索。下面是对代码的逐行解释:. p: [7 M7 G* h0 @2 H

$ n9 m' f: M: R" w7 A3 S1.function [total,maze]=search(i,j,maze,total);
0 I8 a* W  X" @0 S% ?' u( A, J: g' a" Z, A( }$ J. E  U+ I* j

; ]2 I# Q* H3 k1 J% |! q3 u; N7 Z2.定义了一个函数search,该函数接受当前位置(i, j)、迷宫maze和解的数量total作为输入参数,并返回更新后的total和maze。
4 n8 ?0 S4 i6 S( d' s: l2 i0 v
8 b" _2 L% a- f9 T  x4 _# E0 _- P, {2 s4 \
3.fx(1:4)=[0,1,-1,0];
: g- c# \1 Q; p- x: J
% h) Y' f0 x$ ?  _
$ G! B& _" o1 L6 }  x3 I4.定义了一个包含四个元素的数组fx,表示在行方向上的四个可能的移动。
( d+ ?* w5 [' o2 U
1 v9 s; ?% b$ [$ {* i* [2 m# Y1 }7 t& p- _! K2 t
5.fy(1:4)=[1,0,0,-1];6 a, c1 M1 N. s) W0 l4 v' w
. M- ?6 ^" m& y- H
" V, @8 T3 r7 |
6.定义了一个包含四个元素的数组fy,表示在列方向上的四个可能的移动。
3 A+ U8 N) [5 Z2 R4 ~. F$ ?( P2 u
3 b4 i; O  Y8 k/ A
& M& Q# m. a3 S, d# i+ P  ]7.for k=1:4' R& h3 [; e1 n+ c

3 H; L7 r" d3 [
' b) |% l+ c: y$ a- M/ p0 G8.开始一个循环,遍历四个可能的移动方向。
. J" z& k" P* }: h
" Q5 r. n1 `8 L" {6 D7 q; e
% e, w3 r4 n% {8 y$ c" [) S9.newi=i+fx(k);
( _" v- n) O' G, W8 w% @
; \6 {( G4 F* \' |" T9 w
3 r& x$ V. y# e" `) M10.根据当前位置(i, j)和移动方向计算新的行坐标newi。
& f+ {, h, B. Y5 _, {
0 S4 E* h$ ?3 n  h% J' T2 X, v
8 P6 b/ w% w2 v" B! _: |- i11.newj=j+fy(k);
, ]. I. G( X: p. z7 K. G/ d! a: D5 V6 q. t! S' l$ R  m3 H# x

+ K2 x. |( r+ m12.根据当前位置(i, j)和移动方向计算新的列坐标newj。
/ n9 d1 }+ f3 x: F2 I! F, \6 I
2 ^: D' A4 x" i  k0 K
5 Z+ p% b5 Z# O1 M8 t2 t  H; d- V; ?13.if (newi<=8)&(newj<=8)&(newi>=1)&(newj>=1)&maze(newi,newj)==04 O0 d0 q9 I( U. G" a

9 M, t8 K! a2 K+ V6 Z2 \' X, f) M7 ^, ~( ~& G! u  _. V
14.检查新的位置(newi, newj)是否在迷宫范围内且是可行的(即迷宫中的值为0,表示可以走)。" `6 D/ |* O3 U' ]9 l. v) P9 W
  g/ I7 K4 `1 s' {+ C& G
( O) k/ w1 E' l8 D( m
15.maze(newi,newj)=3;
* R( h1 l, C6 v) x% r& a7 s2 Q; F! c1 d* z. h7 i9 W# [- R
2 D0 I0 y. I3 T3 o6 u
16.将迷宫中新的位置标记为3,表示已经走过。1 p: D. Y/ d, l
$ f) S, T  [; n6 C
$ f0 g5 g2 }7 Z6 O3 v- k( K+ q6 u( L+ W
17.if newi==8&newj==8$ P; ]3 l  X5 {" B: ]
( w; X. }, U4 k! J' j: G! X  [

! U, l$ `! p2 [- t: G! S$ r$ @18.如果新的位置是终点(8, 8),则增加解的数量total,显示当前迷宫maze,并结束递归。/ t- f8 t/ }$ r; p" |7 ?
3 M1 a7 r' T* A" G( K# t; t& B

. U5 M( f$ s  `9 ~1 S. m" h19.total=total+1
4 u  p  A' n: g' f( H: J8 C7 ~6 z' ^# q; g
20.增加解的数量。
' A1 t4 N" A+ M+ H9 P21.maze
+ q: b$ v1 G9 S* O/ f* v/ Q
2 I  w/ z0 O( k$ u22.显示当前的迷宫状态。
& L3 l' x+ j4 H23.else+ z% ?5 i. I9 v5 ?5 e

9 ^  q% z2 _, b4 y9 l9 p+ B24.如果新的位置不是终点,执行下面的语句。
, \3 F- h7 p1 e2 c7 l5 ]25.[total,maze]=search(newi,newj,maze,total);
  z' G( |( q. m9 I2 }6 |) w: Q: A0 l% E4 ?, N% ]8 E7 r
26.递归调用search函数,以新的位置(newi, newj)为起点进行搜索。# V/ q7 M- ^/ N5 N, b5 y8 X( M9 T: ^4 \
27.end
& H0 a4 j2 \0 X( d( b7 J& ]) U- e2 q3 S  `) B' n
28.结束if语句。$ ^: G# q& Q+ {; H* G4 u4 R: I
29.end
! A/ V( J, w, p! Y
% p# n1 ^( e. G7 g! R$ J30.结束for循环。
& C& x. E8 P" t5 ?8 u8 P( G31.maze(i,j)=2;& f2 U( P1 n: A/ N4 I

" C' f% Q+ ~; L: m$ ]32.如果所有可能的移动都被尝试过,将当前位置标记为2,表示当前路径是死路。
: `" w1 y. e3 j2 u. S33.end
" ~. L& D' ?0 u9 Q+ F0 o. t) j% s8 O- \% J/ U' U; W0 ^7 Z' q
34.结束search函数。" d. ?4 G3 b5 K- N0 Z2 H: N+ N
35.clear all, @# |; T# w2 T- n% ]

% r" ]8 [$ N( }% g36.清除工作区中的所有变量。
8 b6 t$ L# G2 ^$ ?/ \/ ?37.clc
- R1 K! d" v) R1 F! c% ^; W% k. G1 Y1 Z' G" F9 h& m, u
38.清空命令窗口。
: p3 s# N, T3 p9 ~0 N7 |7 D% t39.定义了一个8x8的迷宫maze,其中0表示路,1表示墙。
/ q: _. O" w4 \40.total=0;
' |# w9 L, C; R4 c) S7 _9 D
) q3 T6 Q$ b( z; x1 D( `; G41.初始化解的数量。  Y& p- m4 ~( }- ]3 P- X8 `4 N9 \
42.maze(1,1)=3;- H8 a6 N. {! d1 W

) O% Q+ i' O( l7 m1 _6 q8 o+ ~! w+ y43.将起始位置标记为3,表示已经走过。
; m3 e) j' a. c) V* Q+ [44.[total,maze]=search(1,1,maze,total);
4 R/ R" `1 r5 ~" c& w) l( g2 D
; C+ r# C% v4 U7 j/ g45.调用search函数开始深度优先搜索。/ H6 t3 F) i% R& u+ y

% ^2 q0 c4 B$ }% U3 e整个过程是通过递归实现深度优先搜索,尝试从起始位置到达终点,并记录所有可能的解。在搜索过程中,迷宫中的可行路径被标记为3,死路被标记为2。搜索结束后,会显示解的数量和每个解对应的迷宫状态。
: `6 T" o7 d. @: C. V/ Z$ t& a
- v: k7 o- m& v  i/ u
& M! A* _8 A  I
# k; O+ z* Z- }; B1 X: r" N; o' A2 D1 z; U( L& B* N
: O2 ?# ]7 w, E8 E) V7 h

( I2 j- M  v& W8 c: ?7 O. a

深度优先搜索.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-4-12 12:04 , Processed in 0.405586 second(s), 55 queries .

回顶部