数据结构-C++ 迷宫


迷宫:


#include <iostream>

#include "missingRoom.h"
using namespace std;
void main()
{
missingRoom a;
a.find();
system("pause");
return;

}


#include "missingRoom.h"

#include <iostream>

using namespace std;

missingRoom::missingRoom()
{
m_idi = 0;
m_irow = 10;
m_icol = 10;
m_ix = 1;
m_iy = 1;
}
void missingRoom::find()
{
int m_iRoom[10][10]=
{
{ 1,1,1,1,1,1,1,1,1,1 },
{ 1,0,0,1,0,0,0,1,0,1 },
{ 1,0,0,1,0,0,0,1,0,1 },
{ 1,0,0,0,0,1,1,0,0,1 },
{ 1,0,1,1,1,0,0,0,0,1 },
{ 1,0,0,0,1,0,0,0,0,1 },
{ 1,0,1,0,0,0,1,0,0,1 },
{ 1,0,1,1,1,0,1,1,0,1 },
{ 1,1,0,0,0,0,0,0,0,1 },
{ 1,1,1,1,1,1,1,1,1,1 }
};
MyStack stack;
m_iRoom[m_ix][m_iy] = -1;//将该点的值改为-1,防止有回到起点。
int i = 1, j = 1;
if (stack.push(i) && stack.push(j))
{//将此时点所在的位置传入栈中
m_iRoom[m_ix][m_iy] = -1;
while (!stack.full())//只要栈的空间并没有被占满,循环将会进行,直至找到走出迷宫的路径
{
if (i == (m_irow - 2) && j == (m_icol - 2))
{
cout << "迷宫的路径如下:" << endl;
stack.getstack();
return;
}//打印出迷宫的路径
int find = 0;
m_idi = 0;
find = 0;//使得每次循环,m_idi,find的值为0;
while (m_idi < 5 && find == 0)//往四个方向移动,那个方向是可以通过的。
{
m_idi++;
i = m_ix;//使得每次i,j循环时,初值不变。
j = m_iy;
switch (m_idi)
{
case 1:
if (i < 11)
i = i - 1;
break;
case 2:
if (j < 11)
j = j + 1;
break;
case 3:
if (i < 11)
i = i + 1;
break;
case 4:
if (j < 11)
j = j - 1;
break;
}
if (m_iRoom[i][j] == 0 && m_idi < 5)
{
find = 1;
}
}


if (find == 1)//说明找到的位置是可以通过的。
{


if (stack.push(i) && stack.push(j))
{
m_iRoom[m_ix][m_iy] = -1;//此时m_ix,m_iy的值为上一个点的坐标
m_ix = i;
m_iy = j;
}
}
else//当find!=1,即进入死路,需要退回上一个位置;
if (stack.pop(j) && stack.pop(i))
{
m_iRoom[m_ix][m_iy] = -1;
m_ix = i;
m_iy = j;
m_iRoom[m_ix][m_iy] = 0;
}
}
}
cout << "hihihi" << endl;
return;
}


#include "MyStack.h"


class missingRoom
{
public:
missingRoom();
void find();
private:

int m_idi ;
int m_irow;
int m_icol;
int m_ix;
int m_iy;


};#include "MyStack.h"
#include <iostream>
using namespace std;


MyStack::MyStack()
{
m_ibox = new int[100];
m_iTop = 0;
m_ilength = 100;
}
MyStack::~MyStack()
{
delete[] m_ibox;
}
bool MyStack::empty()//若空则返回true.
{
if (0 == m_iTop)
return true;
else
return false;
}
bool MyStack::full()
{
if (m_iTop == m_ilength)
return true;
else
return false;
}
bool MyStack::push(int m_i)
{
if (!full())
{
m_ibox[m_iTop] = m_i;

m_iTop ++;
return true;
}
else
return false;
}
bool MyStack::pop(int &m_i)
{
if (!empty())
{
m_iTop --;
m_i = m_ibox[m_iTop];
return true;
}
else
return false;
}
void MyStack::getstack()
{
if (empty())
{
cout << "the stack is empty." << endl;
}
else
for (int i = 0; i < m_iTop; i += 2)
{
cout << "(" << m_ibox[i] << "," << m_ibox[i + 1] << ")" << " ";
if (i % 4 == 0)
cout << endl;
}
}

class MyStack
{
public:
MyStack();
~MyStack();
bool empty();
bool full();
bool push(int m_i);
bool pop(int &m_i);
void getstack();
private:
int *m_ibox;
int m_iTop;
int m_ilength;


};




本来打算通过二维数组传递数据,后来发现总是遇到问题,没办法先完成一个可行版本,


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值