简单迷宫算法实现

一.设置迷宫
要打印一个简单的迷宫,我们理所当然的想到了利用二维数组,在迷宫的实现中我定义了一个maze.txt的文件用来存储迷宫,在初始化的时候只需要将该迷宫从maze.txt中读出来就可以了.
0-路
1-墙

这里写图片描述

二.如何找到迷宫的通路

(1).如果当前路径已经走过则要留下标记;如果走到死胡同也要留下标记,但是要体现回溯,所以这两种情况的标记最好不同

(2).找迷宫路径的可通路可理解为使用试探法.
即在一个结点的上,下,左,右四个方向进行试探,如果某一个方向满足迷宫位置要求则将该位置压栈;如果走到死胡同此时该位置的四个方向都不可通(之前已经将走过的路标记为2),我们只需要将该位置出栈即可.

(3).判断是否走出迷宫.
因为迷宫的出口只可能在边界,我们可以认为三个方向都可能存在出口.所以在判断是否走出迷宫的时候,我们可以在除了入口的那一面都进行判断.

三.递归代码实现.(体现回溯和找到迷宫出口)

#include <iostream>

#include <string>
using namespace std;
#include <assert.h>


struct Seat
{
    Seat(int x, int y)
        :_x(x)
        ,_y(y)
    {}

    int _x;
    int _y;
};

class Maze
{
public:
    Maze(FILE* fp, int row, int col)
        :_row(row)
        ,_col(col)
    {
        _map = new char*[10];
        for(int index = 0; index < 10; ++index)
        {
            _map[index] = new char[10];
        }

        for(int i = 0; i < _row; ++i)
        {
            for(int j = 0; j < _col; ++j)
            {
                _map[i][j] = fgetc(fp);
                if(_map[i][j] == '\n' || _map[i][j] == ' ')//跳过空行
                    --j;
            }
        }
    }

    bool IsPass(const Seat& s)const
    {
        if(_map[s._x][s._y] == '1' )
            return true;
        return false;
    }

    bool PassMaze(Seat& s)
    {
        if(s._x>_row || s._x<0 || s._y<0 || s._y>_col)
            return true;

        if(IsPass(s))
    
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值