关于用栈实现迷宫求解的出栈问题
这个功能是实现了栈对于迷宫的求解,先建立一个迷宫,0是墙,1是路,3是出口,遍历四个方向,有可前进的路,当前位置进栈,然后继续求解,如果此路是死路,进行退栈操作,找到下一条路,但是我的这个程序在找到第一条死路,进行退栈的时候,直接程序就结束了,自己也找不到问题,所以希望大佬帮忙看一下
<code>
#include <iostream>
#include<stdio.h>
#include<stdlib.h>
#include< stack >
using namespace std;
//空格为迷宫路径
//“O”为终点
//“#”为障碍物
struct coo //坐标模块
{
int x;
int y;
};
struct element{
int x;
int y;
int di; //下一步的方向,1,2,3,4分别为上,右,下,左
};
typedef struct mapStack //链栈
{
element elem;
struct mapStack *next;
}*MapStack;
int InitStack(MapStack &S){
S = NULL;
return 1;
}
int StackEmpty(MapStack &S){
if (S==NULL){
return 1;
}
else{
return 0;
}
}
int Push(MapStack &S, element e){
MapStack p;
p = (MapStack)malloc(sizeof(mapStack));
p->elem = e;
p->next = S;
S = p;
return 1;
}
int Pop(MapStack &S, element &e) //栈顶元素出栈
{
MapStack p;
if (!StackEmpty(S))
{
e = S->elem;
p = S;
S = S->next;
free(p);
return 1;
}
else
return 0;
}
/*
0000000000
0110111010
0110111010
0111100110
0100011110
0111011110
0101110110
0100010010
0011111130
0000000000
*/
void mazePath(){
int flag = 0;
int maze[10][10] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 1, 1, 0, 1, 1, 1, 0, 1, 0 }, { 0, 1, 1, 0, 1, 1, 1, 0, 1, 0 }, { 0, 1, 1, 1, 1, 0, 0, 1, 1, 0 }, { 0, 1, 0, 0, 0, 1, 1, 1, 1, 0 }, { 0, 1, 1, 1, 0, 1, 1, 1, 1, 0 }, { 0, 1, 0, 1, 1, 1, 0, 1, 1, 0 }, { 0, 1, 0, 0, 0, 1, 0, 0, 1, 0 }, { 0, 0, 1, 1, 1, 1, 1, 1, 3, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } };
int a, b,dia;
int i, j;
int add[4][2] = { { -1, 0 }, { 0, 1 }, { 1, 0 }, { 0, -1 } };
struct coo start, end;
MapStack s1;
MapStack s2;
InitStack(s1);
InitStack(s2);
element e, elem;
start.x = 1;
start.y = 1;
end.x = 9;
end.y = 9;
maze[start.x][start.y] = 3;
elem.x = start.x;
elem.y = start.y;
elem.di = -1;
Push(s1, elem);
while (!StackEmpty(s1)){
Pop(s1, elem);
i = elem.x;
j = elem.y;
dia = elem.di + 1;
while (dia < 4){
a = i + add[dia][0];
b = j + add[dia][1];
cout << maze[a][b];
if (maze[a][b]==0){
dia++;
flag++;
}
else if (maze[a][b] == 1){
elem.x = a;
elem.y = b;
elem.di = -1;
maze[i][j] = 2;
Push(s1,elem);
dia=5;
}
else if (maze[a][b] == 2){
dia++;
flag++;
}
else if (maze[a][b]==3){
while (s1){
Pop(s1,e);
Push(s2,e);
}
while (s2){
Pop(s2, e);
printf("----->%d,%d,%d/n", e.x, e.y, e.di);
}
break;
}
}
if (flag==4){
maze[i][j] == 0;
Pop(s1,e);
flag = 0;
}
else {
flag = 0;
}
}
}
void printMap(){
cout << "#" << "#" << "#" << "#" << "#" << "#" << "#" << "#" << "#" << "#" << endl;
cout << "#" << " " << " " << "#" << " " << " " << " " << "#" << " " << "#" << endl;
cout << "#" << " " << " " << "#" << " " << " " << " " << "#" << " " << "#" << endl;
cout << "#" << " " << " " << " " << " " << "#" << "#" << " " << " " << "#" << endl;
cout << "#" << " " << "#" << "#" << "#" << " " << " " << " " << " " << "#" << endl;
cout << "#" << " " << " " << " " << "#" << " " << " " << " " << " " << "#" << endl;
cout << "#" << " " << "#" << " " << " " << " " << "#" << " " << " " << "#" << endl;
cout << "#" << " " << "#" << "#" << "#" << " " << "#" << "#" << " " << "#" << endl;
cout << "#" << "#" << " " << " " << " " << " " << " " << " " << "O" << "#" << endl;
cout << "#" << "#" << "#" << "#" << "#" << "#" << "#" << "#" << "#" << "#" << endl;
}
/*
0000000000
0110111010
0110111010
0111100110
0100011110
0111011110
0101110110
0100010010
0011111120
0000000000
*/
int main(){
//printMap();
mazePath();
}
</code>