利用广度策略解决迷宫问题

本文介绍了使用广度优先搜索(BFS)策略解决迷宫问题的基本思路。通过创建两个队列存储迷宫入口,并逐层遍历相邻位置,直到找到出口。在过程中标记已访问路径,记录前驱节点,以便输出解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述
在这里插入图片描述
基本思路
1.创建两个空队列LinkQueueX和LinkQueueX
2.将入口entreX和entryY分别压入队列LinkQueueX和LinkQueueX。
3.当队列不空
①取队头元素,出队
②for(mov=0;mov<8;mov++),即还存在可以探索的相邻的方向。
a.按照顺时针依次探索各个位置(X,Y)。
b.如果(posX,posY)是出口,则输出路径,返回。
c.如果(posX,posY)是没有走过的通路;
~设置标志位mark[posX][posY]=1。
~当前位置入队。
~记录前驱位置,方便输出路径。

代码及注释如下

#include <stdio.h>
#include <stdlib.h>
typedef int DataType;
struct Node
{
   
   
    DataType data;
    struct Node *link;
};
typedef struct Node*PNode;
struct Queue
{
   
   
    PNode f;
    PNode r;
};
typedef struct Queue *LinkQueue;
struct MAZE_STRU
{
   
   
    int size;
    int **data;
};
typedef struct MAZE_STRU Maze;
LinkQueue SetNullQueue_Link()//创建空队列
{
   
   
    LinkQueue lqueue;
    lqueue=(LinkQueue)malloc(sizeof(struct Queue));
    if(lqueue!=NULL)
    {
   
   
        lqueue->f=NULL;
        lqueue->r=NULL;
    }
    else
        printf("Aloc failure!\n");
    return lqueue;
}
int IsNullQueue_Link(LinkQueue lqueue)//判断队列是否为空
{
   
   
   return  (lqueue->f==NULL);
}
void EnQueue_Link(LinkQueue lqueue,DataType x)//入队操作
{
   
   
    PNode p;
    p=(PNode)malloc(sizeof(struct Node));//申请节点空间
    if(p==NULL)
        printf("Alloc Failure!\n");
    else
    {
   
       p->data=x;//数据域赋值
         p->link=NULL;//指针域赋值
        if(lqueue->f==NULL)//空队列的特殊处理
        {
   
   
            lqueue->f=p;
            lqueue->r=p;
        }
        else
        {
   
   
            lqueue->r->link=p;//插入队尾
            lqueue->r=p;//修改队尾指针
        }
    }

}
void DeQueue_Link(LinkQueue lqueue)
{
   
   
    PNode p;
    if(lqueue->f==NULL
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值