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

算法题每周一坑(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

猜你喜欢

转载自blog.csdn.net/DownloadV/article/details/81393527
今日推荐