hdu 1728 bfs 最小拐弯数

本文介绍了一道HDU 1728题目,该题目要求使用BFS寻找路径时的最小拐弯数。不同于传统的BFS求最小步数,此题的重点在于如何更新和维护每个点的最小拐弯数,而不能简单地标记已访问节点。在解决过程中,作者遇到了未初始化拐弯数数组、队列溢出和剪枝后忘记弹出队首元素导致的死循环等问题,并给出了相应的解决方法和代码实现。
摘要由CSDN通过智能技术生成

链接:http://acm.hdu.edu.cn/showproblem.php?pid=1728

之前没有做过类似这种要最少拐弯数的题目,一般求最少的用bfs应该比较好。。但是之前bfs一般都是用来求最小步数,也就可以标记过走过的点不再走。现在本题要的是最小的拐弯数,所以不能标记走过的点。。需要一个数组来记录当前这个点所需要的最小拐弯数,如果此时这个点的拐弯数比之前该点的拐弯数还小或者等于就更新这个值。遍历全图直到找到解为止。

学习:对于bfs找最优解的变形。明白如何更新拐弯数的,保证最小。

背景:1、WA对于保存拐弯数的数组没有初始化为无穷。2、MLE 对于每个点要进行拐弯数的判定,只有比之前保存的值还小或者等与才入队,否则队列会爆。。3、AC后还进行了一个剪枝,但是忘了将队列中的元素弹出。结果死循环。。。 下次注意最好将队列的头元素取出之后就弹出,避免忘记。。。

判定转弯数的时候一定要是等于号。。这是别人的题解http://972169909-qq-com.iteye.com/blog/1244218  看了图就明白了。。

代码:

//hdu 1728
#include<cstdio>
#include<cstring>
#include<queue>
#define INF 10000000;
using namespace std;
int d1[4] = {0,0,1,-1};
int d2[4] = {1,-1,0,0};
int turn1[101][101];
char map[101][101];
int n,m,k;
int ok;
int sx,sy,ex,ey;
struct state
{
	int x,y;
	int turn;
	int dir;
}cur,next1;
void bfs(sta
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值