#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语言和双栈来解决迷宫问题,并利用深度优先搜索算法找到迷宫出口。

代码解释:

  1. 枚举类型 Bool: 定义了布尔类型 TrueFalse,用于表示栈是否为空或已满。
  2. 结构体 SeqStack: 定义了顺序栈的数据结构,包括数据指针 data、栈顶指针 top 和最大容量 maxSize
  3. 函数 CreateStack: 创建一个新的栈,并初始化其成员变量。
  4. 函数 IsEmpty: 判断栈是否为空。
  5. 函数 IsFull: 判断栈是否已满。
  6. 函数 main: 主函数,实现了双栈迷宫问题的解决过程。

程序流程:

  1. 读取两个整数 n1n2,分别表示两个栈的最大容量。
  2. 创建两个栈 stack1stack2
  3. 循环读取字符 c,直到读取到字符 'T'。
  4. 如果 c 为 'A',则读取一个整数 x,并将其压入 stack1
  5. 如果 c 为 'D',则弹出 stack2 的栈顶元素并输出。
  6. 程序结束时,释放栈的内存空间。

注意:

  • 本代码仅实现了双栈迷宫问题的基本功能,未考虑迷宫的具体表示和路径搜索等细节。
  • 在实际应用中,需要根据具体问题进行修改和完善。
C语言实现双栈迷宫问题:深度优先搜索算法

原文地址: http://www.cveoy.top/t/topic/cv4n 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录