QQ登录

只需要一步,快速开始

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

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

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2023-12-22 17:11 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
为大家分享一个代码,该代码是使用升读优先搜索解决迷宫难题
3 _# j/ r0 Y8 y- c$ b% g
3 }$ ]4 U! I% W) l& t当调用[total,maze]=search(1,1,maze,total);时,会从(1, 1)这个位置开始,在给定的迷宫maze上执行深度优先搜索。下面是对代码的逐行解释:  |8 c$ R" o5 }, m3 b. |
& h% Q1 }& R5 N" ~9 `
1.function [total,maze]=search(i,j,maze,total);* O" A2 x( ^& C' G1 L0 i

8 N7 x0 |: ?* i
! N$ J+ x* h8 l6 k/ T( V/ |2.定义了一个函数search,该函数接受当前位置(i, j)、迷宫maze和解的数量total作为输入参数,并返回更新后的total和maze。
* Y" v1 P' {3 X- B9 n! k/ c- I
4 {6 [3 ]# e5 a# B6 D( {
7 z- [6 E0 T* ~/ m1 q& D# k3.fx(1:4)=[0,1,-1,0];
6 O5 h& ~' ?: \9 P1 K. R. b& v  V8 o+ w- }7 X& [5 |% P2 b
: x2 ?; G; g" ]! J8 R( q
4.定义了一个包含四个元素的数组fx,表示在行方向上的四个可能的移动。" L: ?5 ]" z+ i$ g# `1 O- Z

, p# |3 R  y, Y* y- w
& G# o$ o0 R# V7 V2 F" {# I5.fy(1:4)=[1,0,0,-1];% v$ Z* L* P& F: H* R
9 f8 O( l: l" ?5 x1 [
; D& L2 T2 g4 K  g
6.定义了一个包含四个元素的数组fy,表示在列方向上的四个可能的移动。) c" K! f% |/ q) K
8 r4 P( g+ \* p' J
; s. h5 ?" l$ U2 X! O
7.for k=1:4
% R9 C6 {  P. X6 b' I/ o( ^0 L. O/ A% ]7 F9 D' q

3 V+ h0 q# Q7 M" l8.开始一个循环,遍历四个可能的移动方向。
, a9 u+ N+ R! O( Y8 X9 C0 N0 \+ R, ~/ I' F  S
! Z/ E) j* C6 }+ u
9.newi=i+fx(k);
* `6 A" @+ y. V6 }; ^8 F- f0 p' A) x8 \9 c% o

+ i4 q, }6 `+ [( X1 J10.根据当前位置(i, j)和移动方向计算新的行坐标newi。
/ @" w7 X! Y2 Z$ N7 r
3 P  [6 g) _$ c. D$ G
3 p( j" N6 h' ?& d5 _2 i11.newj=j+fy(k);
4 T/ H) Z7 v' _' c$ k# V' v* T& e8 B2 d2 ?, _0 e$ `
7 [0 Y) W' m# n
12.根据当前位置(i, j)和移动方向计算新的列坐标newj。; c. j: N  l4 }
9 P" L) a0 ]/ ?" W

7 f2 l6 ]6 e& ]7 E, J5 h* U/ N13.if (newi<=8)&(newj<=8)&(newi>=1)&(newj>=1)&maze(newi,newj)==0
9 y2 @5 J6 p. M! Q" q* i
# U; A6 [1 b; u  m
6 j5 U4 W2 \; w! b7 U0 Y6 m14.检查新的位置(newi, newj)是否在迷宫范围内且是可行的(即迷宫中的值为0,表示可以走)。4 `5 V, V  o  z4 Z7 y$ l# \
9 g$ l# g8 o; e& ~4 G$ \

7 a5 K2 |' y2 Q: [15.maze(newi,newj)=3;
* e2 `3 I( g0 ]
; M8 @3 i8 j, e" \% j$ H0 t& |6 F: b
16.将迷宫中新的位置标记为3,表示已经走过。! M$ b) i$ t1 |) f
! S% E- c1 z( D% U

& k+ m1 u& O3 K1 A, k$ f17.if newi==8&newj==8
+ K- D6 i7 f2 T, U6 y( v
! X& @2 L4 F0 w9 j+ W0 G0 W5 @% S7 c. W
18.如果新的位置是终点(8, 8),则增加解的数量total,显示当前迷宫maze,并结束递归。
/ C# |3 T0 s# |# L9 I4 p, @* X
  X1 D+ |! q7 j& _  G) {( R
" a  a* Z1 n. h3 ^19.total=total+13 c+ J  ~8 [- Y+ {6 n, Y& d: {

4 X$ _0 g2 L7 c7 z1 {# U, T% J20.增加解的数量。& c' i& ~( }$ p$ k4 s  t
21.maze
( Q, u; `- A' i. u6 N- n( x
- T, U6 @6 y) }# ~3 [3 D3 O22.显示当前的迷宫状态。% j  e+ I+ Y: K9 F6 c8 Y; B& G% x
23.else' K- f' i' y  c
2 T3 }+ e  |8 _7 W- T! [7 }" Y3 E
24.如果新的位置不是终点,执行下面的语句。9 g9 A; g: |0 l
25.[total,maze]=search(newi,newj,maze,total);
& A. E( \; H" I1 w: W3 d* P
! b" c4 k) y0 C5 X5 I  u- I26.递归调用search函数,以新的位置(newi, newj)为起点进行搜索。7 x) J1 X4 T0 t8 H  @
27.end
" Q0 M9 j8 \. O
3 M9 h) ?2 Z% i, F% \! E28.结束if语句。
5 R" N3 A  J0 I) }" W29.end, ^- |3 g6 P1 S, z3 B. P3 r" d

$ G/ a5 w* a/ p$ H+ g5 ]2 W30.结束for循环。- I4 f+ D( D1 H3 y& ]7 n- F8 l
31.maze(i,j)=2;
! X) d7 r2 n. ~; L6 p' V# W9 K$ d0 E) P7 ^+ F0 }
32.如果所有可能的移动都被尝试过,将当前位置标记为2,表示当前路径是死路。
2 P: Y( m' |. h33.end
# ~, b% k) m8 r4 l6 o
# R4 G: Q+ y) A0 n0 H34.结束search函数。
8 j2 i! l" n" b0 c5 z# ]  q35.clear all
' O# E/ Y2 F% P+ Z2 C" }- R' d
2 \- N" A% Y3 `- Y8 ~' y+ ^2 X36.清除工作区中的所有变量。- l) p' W% j/ {
37.clc
- G+ H) i' r' i' H# _1 s' x2 \$ W" U0 p1 c3 n
38.清空命令窗口。
) |( L3 V. w& e, s/ K8 p39.定义了一个8x8的迷宫maze,其中0表示路,1表示墙。
: m' U: n9 h$ Q$ k* X40.total=0;
4 i5 _% A0 w% M/ l7 b' {/ K3 {0 {
41.初始化解的数量。
7 I: \* ]$ j& o* Q42.maze(1,1)=3;( x! S' n. S; ?) [4 P% i6 o. `
; q8 C5 k. f0 Z6 Z
43.将起始位置标记为3,表示已经走过。
: ?' L9 H" [, u4 K: W3 M5 R44.[total,maze]=search(1,1,maze,total);
" C6 j" O7 G* O3 X0 W% J9 I' H0 K8 k/ S
45.调用search函数开始深度优先搜索。
% _: O1 q7 t& W
8 i' V% f+ I7 T4 }$ t* n整个过程是通过递归实现深度优先搜索,尝试从起始位置到达终点,并记录所有可能的解。在搜索过程中,迷宫中的可行路径被标记为3,死路被标记为2。搜索结束后,会显示解的数量和每个解对应的迷宫状态。4 v$ V: ^9 Q/ D- t- A) u
' T  c1 v, u& ~) o) X' p
! |% a$ r5 O8 N$ C. [
; e6 k) B6 B3 L) v4 l8 X/ h& m

; \/ |" V/ k7 |: l9 X+ [4 T1 Q9 N3 h, |

' Z( a. F, W3 B

深度优先搜索.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-1 09:13 , Processed in 0.422572 second(s), 55 queries .

回顶部