#include<iostream>
using namespace std;
int dx[4] = { 0,1,0,-1 };
int dy[4] = { 1,0,-1,0 };
struct DataType
{
int x, y, d;
};
struct DirectInc
{
public:
int dx;
int dy;
};
template <class T>
class SeqStack
{
public:
SeqStack()
{
top = -1;
}
~SeqStack() {}
void Push(T x);
T pop();
T GetTop();
int Empty();
private:
T data[100];
int top;
};
template<class T>
void SeqStack<T>::Push(T x)
{
if (top == 99)
throw"over flow";
top++;
data[top] = x;
}
template<class T>
T SeqStack<T>::pop()
{
if (top == -1)
throw"under flow";
T x = data[top--];
return x;
}
template<class T>
T SeqStack<T>::GetTop()
{
if (top == -1)
throw"under flow";
T x = data[top-1];
return x;
}
template<class T>
int SeqStack<T>::Empty()
{
if (top == -1)
return 1;
return 0;
}
int mazepath(int maze[10][10], DirectInc move[4])
{
DataType temp;
int g, h, d, i, j;
SeqStack<DataType>s;
temp.x = 1;
temp.y = 1;
temp.d = -1;
s.Push(temp);
while (!s.Empty())
{
temp = s.pop();
i = temp.x;
j = temp.y;
d = temp.d + 1;
while (d < 4)
{
g = i + move[d].dx;
h = j + move[d].dy;
if (maze[g][h] == 0)
{
temp.x = i;
temp.y = j;
temp.d = d;
s.Push(temp);
maze[i][j] = -1;
i = g;
j = h;
if (i == 8 && j == 8)
{
temp.x = i;
temp.y = j;
s.Push(temp);
return 1;
}
else d = 0;
}
else d++;
}
}
return 0;
}
int main()
{
int maze[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, };
DirectInc move[4];//下,右,上,左
move[0].dx = 0;
move[0].dy = 1;
move[1].dx = 1;
move[1].dy = 0;
move[2].dx = 0;
move[2].dy = -1;
move[3].dx = -1;
move[3].dy = 0;
mazepath(maze, move);
return 0;
}
栈的深搜(迷宫问题)
最新推荐文章于 2022-06-27 17:31:29 发布