c顺序栈 -实现迷宫
第一次写迷宫记录一下哈 以下是全部程序没有将每个步骤分成单个方法
#include<stdio.h>
#include<iostream>
using namespace std;
#define MAXSIZE 100
#define M 8
#define N 8
int mg[N + 2][M + 2] = { {1,2,1,1,1,1,1,1,1,1},
{1,0,0,1,0,0,0,1,0,1},
{1,1,0,1,0,0,0,1,0,1},
{1,0,0,0,0,1,1,0,0,1},
{1,0,1,1,0,0,0,0,1,1},
{1,0,0,0,1,1,1,0,0,1},
{1,0,1,0,1,0,1,1,0,1},
{1,0,1,1,1,0,1,1,0,1},
{1,0,0,0,1,0,0,0,0,3},
{1,1,1,1,1,1,1,1,1,1} };
typedef struct {
int x;
int y;
int di;
}box;
typedef struct {
box data[MAXSIZE];
int top;
}stack;
void Top(stack &st);
bool re(stack &st,int x, int y, int x2, int y2);
int main() {
stack st;
Top(st);
if (!re(st,1, 1, M, N)) {
printf("无解");
}
cout <<endl<<"其路线图如下:↓"<<endl<<endl;
for (int i = 0; i < M + 2; i++) {
for (int j = 0; j < N + 2; j++) {
if (mg[i][j] == 2) printf("↓");
else if (mg[i][j] == 3) printf("→");
else if (mg[i][j] == 1) printf("■");
else if (mg[i][j] == -1) printf("√");
else printf(" ");
}
printf("\n");
}
}
void Top(stack& st) {
st.top = -1;
}
bool re(stack &st,int x, int y, int x2, int y2) {
int i, j, di, find;
st.top = -1;
st.top++;
st.data[st.top].x = x;
st.data[st.top].y = y;
st.data[st.top].di = -1;
while (st.top > -1) {
find = 0;
i = st.data[st.top].x;
j = st.data[st.top].y;
di = st.data[st.top].di;
while (di < 4 && find == 0) {
di++;
switch (di) {
case 0:i = st.data[st.top].x - 1; j = st.data[st.top].y; break;
case 1:i = st.data[st.top].x; j = st.data[st.top].y + 1; break;
case 2:i = st.data[st.top].x + 1; j = st.data[st.top].y; break;
case 3:i = st.data[st.top].x; j = st.data[st.top].y - 1; break;
}
if (mg[i][j] == 0) find = 1;
}
if (find == 1) {
st.data[st.top].di = di;
st.top++;
st.data[st.top].x = i;
st.data[st.top].y = j;
st.data[st.top].di = -1;
mg[i][j] = -1;
find = 0;
}else {
mg[st.data[st.top].x][st.data[st.top].y] = 0;
st.top--;
}
if (i == x2&&j == y2) {
printf("迷宫路径如下\n");
for (int m = 0; m <= st.top; m++) {
printf("(%d:%d)\t",st.data[m].x,st.data[m].y);
if ((m + 1) % 4 == 0) printf("\n");
}
printf("\n");
return true;
}
}
return false;
}