您的位置:首页 > 编程语言 > C语言/C++

【C++】迷宫的简单实现

2017-11-16 23:09 337 查看
写一个简单的迷宫

迷宫首先要有地图,我们的地图用一个二维数组表示



这个地图很简单,当为1时表示可以走通,当为0时表示走不通

代码实现思路:

1.送一个能走的起始点

2.创建一个栈,每走一步,把走的位置压入栈中

3.当四个方向都走不通时,出栈一次,返回上一个位置,并把不通的路标记为4,走过的路标记为2.

4.当走出数组且不是起始位置,则该迷宫可走通。

代码:

(1)迷宫中走的方式

#include<iostream>
#include<assert.h>
#include<stack>
using namespace std;
#define ROW 10
#define COL 10
struct Seat
{
Seat(int x,int y)
:_x(x)
,_y(y)
{ }
int _x;
int _y;
};

class Maze
{
public:
Maze(int map[ROW][COL])
{
assert(map);
for (int i = 0; i < ROW;i++)
for (int j = 0; j < COL; j++)
{
_map[i][j] = map[i][j];
}
}
void Point()
{
for (int i = 0; i < ROW; i++)
{
for (int j = 0; j < COL; j++)
cout << _map[i][j] << " ";
cout << endl;
}
cout << endl;
}
bool Ispass(Seat s)
{
if (Exit(s))
{
return true;
}
if (_map[s._x][s._y]==1)
return true;
return false;
}
bool Exit(Seat e)
{
if (e._x<0||e._x>=ROW||e._y<0||e._y>=COL)
return true;
return false;
}
bool PlayMaze(Seat enter)
{
stack<Seat> SeatStack;
if (!Ispass(enter))
{
cout << "入口错误" << endl;
return false;
}
_map[enter._x][enter._y] = 2;
SeatStack.push(enter);

while (!SeatStack.empty())
{
Seat ret=SeatStack.top();
if (Exit(ret))
return true;
_map[ret._x][ret._y] = 2;

Seat up(ret);    //向上
up._x -= 1;
if (Ispass(up))
{
SeatStack.push(up);
continue;
}

Seat left(ret);    //向左
left._y -= 1;
if (Ispass(left))
{
SeatStack.push(left);
continue;
}

Seat right(ret);    //向右
right._y += 1;
if (Ispass(right))
{
SeatStack.push(right);
continue;
}

Seat down(ret);   //向下
down._x += 1;
if (Ispass(down))
{
SeatStack.push(down);
continue;
}

_map[ret._x][ret._y] = 4;
SeatStack.pop();
}
}
private:
int _map[ROW][COL];
};


(2)给出迷宫并给出起始点

int main()
{
int mapArr[ROW][COL] = {
{ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 1, 1, 1, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 1, 0, 1, 0, 0, 0 },
{ 0, 0, 0, 0, 1, 1, 1, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 } };
Maze m1(mapArr);
m1.Point();
m1.PlayMaze(Seat(9,6));
m1.Point();
system("pause");
return 0;
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: