数据结构c语言版上海交通大学出版社项目三《迷宫求解》

迷宫求解是一个经典的程序设计问题。用一个m行*n列的方格图表示迷宫,寻找通过迷宫的一条路径,即从入口出发,沿某一方向向前探索,若能走通,则继续向前走;否则沿原路退回,换一个方向继续探索,直到探索出一条通路为止。

迷宫问题通常描述为:给定一个二维矩阵表示的迷宫,其中 0 表示可以通过的路径,1 表示墙壁。我们需要找到一条从入口到出口的路径,并输出路径上的坐标。

代码如下

#include <stdio.h>
#include <stdlib.h>

// 定义链表节点结构,用于存储迷宫路径中的坐标
typedef struct SNode
{
    int x, y;                        // 存储坐标 (x, y)
    struct SNode *next;              // 指向下一个节点的指针
} SNode;

// 定义链式栈结构
typedef struct
{
    SNode *top;                      // 栈顶指针
    SNode *head;                     // 栈底指针(始终指向栈底)
} LinkStack;

// 初始化链式栈
void InitStack(LinkStack *S)
{
    S->top = S->head = NULL;         // 初始化栈顶和栈底指针为空
}

// 向链式栈中压入一个元素
void Push(LinkStack *S, int i, int j)
{
    SNode *r;                        // 定义一个新节点指针
    r = (SNode *)malloc(sizeof(SNode)); // 动态分配内存
    r->x = i;                        // 设置节点的x坐标
    r->y = j;                        // 设置节点的y坐标
    r->next = NULL;                  // 新节点的next指针置为空

    if (S->top == NULL)              // 如果栈为空
        S->head = S->top = r;        // 新节点同时成为栈底和栈顶
    else
    {
        r->next = S->top;            // 新节点的next指针指向当前栈顶
        S->top = r;                  // 更新栈顶指针为新节点
    }
}

// 从链式栈中弹出一个元素
void Pop(LinkStack *S, int *i, int *j)
{
    SNode *p;                        // 定义一个临时节点指针
    p = S->top;                      // 指向当前栈顶节点
    *i = p->x;                       // 获取栈顶节点的x坐标
    *j = p->y;                       // 获取栈顶节点的y坐标
    S->top = p->next;                // 更新栈顶指针为下一个节点
    free(p);                         // 释放当前栈顶节点的内存
}

// 寻找迷宫路径的函数
void Path(int M[][10], int x1, int y1, int x2, int y2)
{
    int x, y, i, k = 0;              // 定义变量,用于存储当前坐标和路径长度
    int px[50], py[50];              // 用于存储路径坐标的数组
    LinkStack SP;           
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值