BFS 与队列 DFS与递归

这篇博客介绍了如何使用BFS(广度优先搜索)和队列解决POJ 3984迷宫问题,通过结构体数组模拟队列进行层次推进,找到最短路径。同时,还探讨了DFS(深度优先搜索)在POJ 3278和1426题目中的应用,其中DFS在1426题中表现得像二叉树的前序遍历。

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

算法题每周一坑(BFS 与队列 DFS与递归)

搜索


POJ 3984 迷宫

迷宫题:这道题因为迷宫大小有限,所以我用了结构体数组对队列进行模拟

struct node{
int x,y,pre;  //需要保存上一个节点的下标,为了之后输出坐标
}queue[100];

总体思路是:从第一个(0,0)点判断周围所有可能的节点,按照顺序进入队列 
出队时,递归输出路径的坐标,因为是BFS(层层推进),所以当队列中访问到 
最终出口时,即为为短路径

POJ 3278

闪现中的入队出队,输出数据(不用第一题的递归)

hile(front<rear)
  {
    if(queue[front].x==b)
    {
      printf("%d\n",queue[front].step);
      return;
    }
    for(i=0;i<3;i++){
      if (i == 0)
        next_step=queue[front].x+1;
      else if(i==1)
        next_step=queue[front].x-1;
      else
        next_step=queue[front].x*2;
      if(inter(next_step))
      {
      visit[next_step]=1;
      queue[rear].x=next_step;
      queue[rear].step = queue[front].step+1;
      rear++;
      }

    }
      front ++;
  }

POJ 1426 二进制

这一道题是一道很典型的DFS和递归的运用 
但是最后实现的时候却像一个二叉树的前序 
遍历搜索,核心的递归代码如下

    void dfs(unsigned long long int  x,int k,int n)
{
        if(f)      //f为全局变量
            return ;
         if(x%n==0)
         {
             printf("%llu\n",x);
             f=1;
             return ;
         }
         if(k==19)
             return ;
         dfs(x*10,k+1,n);
         dfs(x*10+1,k+1,n);
}

前序遍历:ABDHIEJKCFLMGNO 注:A右侧的节点为C

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值