CSP考试复习:第三单元 3.2 走迷宫

本文主要探讨了CSP考试中关于走迷宫的问题,介绍了一种预处理方法来避免搜索过程中的下标越界,以及深度优先搜索(DFS)和广度优先搜索(BFS)两种搜索策略在解决迷宫问题的应用。对于正常的迷宫结构,DFS、BFS都能有效求解,但在特定的大型迷宫中,DFS和BFS可能效率较低。
摘要由CSDN通过智能技术生成

3.2 走迷宫
【问题描述】从文件 map.txt 中读入一个 m 行 n 列的迷宫,其中 0 代表可以通过,1 代表不可通过(墙)。
请给出一条从(1,1)出发到(m,n)的路径。如果不能到达,输出“Failed”。例如:
10 8
0001000000
0101011110
0111000100
0001010111
0100010001
0111011100
1101010101
0000010000
(1) 预处理
为了防止在搜索时发生下标越界,我们需要做一个小处理:在迷宫的外圈圈上一层围墙,即

111111111111
100010000001
101010111101
101110001001
100010101111
101000100011
101110111001
111010101011
100000100001
111111111111

以下是一些定义:

char map[110][110]; // 先行后列。
bool visited[110][110];
point prev[110][110]; // 记录路径的方法:从A结点扩展到B结点时,将prev[B]设为A。
struct point {int r,c;};
int n,m;
void flag(int r, int c) // 追踪结点,在经过的路径上画箭头。
{
point &t=prev[r][c];
if (!(r==1&&c==1)) flag(t.r,t.c);
if (t.r==r && t.c<c) map[r][c]
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值