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

在这里插入图片描述
在这里插入图片描述
基本思路
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;
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值