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

被折叠的 条评论
为什么被折叠?



