核心代码
//栈相关操作 int initlStack(Stack *S)
int pushStack(Stack S, coordinate e) int popStack(Stack S, coordinate *e) int getTop(Stack S, coordinate *e) void show(Stack S)
//创建一个迷宫 int creatMaze(Maze *m)
//打印出一个迷宫 void showMaze(Maze *m)
//求当前结点的下一个通路
coordinate passNext(Maze *m, int i, int j) //求迷宫路径
int solveMaze(Maze *m, Stack S) //模拟出路径
void showRoad(Maze m, Stack S) 5
程序源码:
#include
#define MAX 100
#define SIZE sizeof(Node)
//**************************** //栈
typedef struct { int x;//行 int y;//列 }coordinate;//坐标
typedef struct node{ coordinate data; struct node *next; }Node, *Stack;
//栈的相关操作
//栈初始化
//带头结点的链栈
int initlStack(Stack *S) { (*S) = (Node *)malloc(SIZE); if((*S) == NULL) { return 1; } (*S)->next = NULL; return 0; }
//入栈
int pushStack(Stack S, coordinate e) { Node *p; p = (Node *)malloc(SIZE); p->data.x = e.x; p->data.y = e.y; p->next = S->next; S->next = p; return 0;
}
//出栈
int popStack(Stack S, coordinate *e) { Node *p; if(S->next == NULL) { printf(\ return 2; } e->x = S->next->data.x; e->y = S->next->data.y; p = S->next; S->next = p->next; free(p); return 0; }
//读取栈顶
int getTop(Stack S, coordinate *e) { e->x = S->next->data.x; e->y = S->next->data.y; return 0; }
//显示
void show(Stack S) { Node *p; p = S->next; while(p != NULL) { printf(\ p = p->next; } printf(\}
//***************************
//*************************** //迷宫
typedef struct { int row; int col; int arr[MAX][MAX]; }Maze;
//创建一个迷宫
int creatMaze(Maze *m) { int i, j; printf(\ scanf(\ printf(\ for(i = 0; i <= MAX - 1; i++) { for(j = 0; j <= MAX - 1; j++) { m->arr[i][j] = 1; } } for(i = 1; i <= m->row; i++) { for(j = 1; j <= m->col; j++) { scanf(\ } } return 0; }
//显示迷宫信息
void showMaze(Maze *m) { int i, j; printf(\ for(i = 1; i <= m->row; i++) { for(j = 1; j <= m->col; j++) { printf(\ } printf(\ } printf(\ for(i = 1; i <= m->row; i++) { for(j = 1; j <= m->col; j++) { if(m->arr[i][j] != 0) { printf(\■ \ } else { printf(\□ \ } } printf(\ } }
//求当前结点的下个通路 //顺时针找
coordinate passNext(Maze *m, int i, int j) { coordinate k; if(m->arr[i][j+1] == 0) {//东 k.x = i; k.y = j+1; return k; } if(m->arr[i+1][j] == 0) {//南 k.x = i+1; k.y = j; return k; } if(m->arr[i][j-1] == 0) {//西 k.x = i; k.y = j-1; return k; } if(m->arr[i-1][j] == 0) {//北 k.x = i-1; k.y = j; return k; } else {//不存在 k.x = -1; k.y = -1; return k; } }
//求解迷宫
int solveMaze(Maze *m, Stack S) { int i, j; int boolean; coordinate a; i = 1; j = 1; do { if(m->arr[i][j] == 0) { a.x = i; a.y = j; m->arr[i][j] = 2; pushStack(S, a);