利用栈求解迷宫 --数据结构实验

一、实验目的

1、了解回溯法在求解迷宫问题中的应用

2、进一步掌握栈的使用

二、实验内容

用回溯法求解迷宫问题,可以用一个栈保存探索的序列。并且在该迷宫的行走中,站在一点可以有八个方向选择。

比如如下的迷宫

Enter-> 0   1   1   1   0   0   0   0   0   0

0   0   0   1   0   0   0   1   0   0

0   1   0   1   1   0   0   1   0   0

0   1   0   0   1   0   1   1   0   0

0   1   0   0   1   0   1   1   0   0

1   1   1   0   1   0   1   0   0   0

0   0   1   0   0   0   1   0   1   1

0   0   1   0   0   0   1   0   1   1

0   1   1   0   1   0   1   0   0   0

0   0   0   0   1   0   1   1   0   0 --> EXIT

下面是可能的路径(注意:从入口到出口可能有多条路径,优先选择的方向不同,路径可能也不一样!)

 Path: ( maze[0][0], maze[1][0], maze[1][1], maze[1][2], maze[2][2],

   maze[3][2], maze[3][3], maze[4][3], maze[5][3], maze[6][3],

   maze[6][4], maze[6][5], maze[5][5], maze[4][5], maze[3][5],

   maze[2][5], maze[2][6], maze[1][6], maze[0][6], maze[0][7],

   maze[0][8], maze[1][8], maze[2][8], maze[3][8], maze[4][8],

   maze[5][8], maze[5][7], maze[6][7], maze[7][7], maze[8][7],

   maze[8][8], maze[8][9], maze[9][9])

 

Enter-> X   1   1   1   0   0   X---X---X   0

X---X---X   1   0   0   X   1   X   0

0   1   X   1   1   X---X   1   X   0

0   1   X---X   1   X   1   1   X   0

0   1   0   X   1   X   1   1   X   0

1   1   1   X   1   X   1   X---X   0

0   0   1   X---X---X   1   X   1   1

0   0   1   0   0   0   1   X   1   1

0   1   1   0   1   0   1   X-- X-- X

0   0   0   0   1   0   1   1   0   X --> EXIT

 

1、提示:

1)数据结构:

² 用二维数组MAZE[m+2][n+2]表示迷宫的结构,数组中的值为1表示是墙,为0表示可以走通。(用MAZE[m+2][n+2]而不用MAZE[m][n]的原因在于想表示和编写代码的时候简单些,而且让迷宫周围都是墙,防止错误的走出去)

² 用二维数组MARK[m+2][n+2]表示迷宫是否被走过,主要是为了回溯时已经证明走不通的路线就不要再去走了。(用MARK[m+2][n+2]而不用MARK[m][n]的原因在于想表示和编写代码的时候简单些)

² 二维数据MOVE[8][2]是为了更方便的移动到下一步,改变坐标。这个二维数组是为了更好的转换坐标(八个方向,从07),而且也能避免重复走路

² 用栈保存走过的路径

2)输出:

² 迷宫布局,用0表示可以走通的地方,用1表示墙

² 如果能走通,则输出路径和路径的长度;若不能走通,则输出提示不能走通

² 带有路径的迷宫布局


思路:

定义一个二位数组,保存这些迷宫的节点,并且规定等于1的数组表示为墙,等于0的数组表示为通道,为了不让探索路线的时候,走出所定义的迷宫区域,我们建立一堵墙将除了出口为0外,别的都为1,即为墙。



          迷宫建立好了,怎么探索路线呢?首先,每个节点都有8个方向可以探索,每个节点都有八个方向,



  • 6
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值