HDU_1728(BFS)小白详细注解

   小白这几天刚入门搜索,前面写DFS,用递归写的蛮顺手的。然后碰到了我的第一个BFS题目,被摧残了好久才AC。不过也有点收获。至少我知道以前的我DFS代码写的不好,也懂了一点BFS。加油。

题目HDU1728:http://acm.hdu.edu.cn/showproblem.php?pid=1728

   这题要注意是以转弯次数作为参考,然后进行遍历,还有第一次不算转弯(初始转弯次数(k)为-1),然后记录走过的路,因为是按转弯次数来看的,我们每转一次弯,都要把这条路走到底,这样队列里面是按转弯次数从小到大排列的,最后判断是否走到我们需要走的位置。

下面的AC代码,有详细注解。

#include
#include
#include
using namespace std;
int k,n,m,x2,y2,x1,y1;
int a[110][110];//迷宫
int b[110][110];// 记录是否走过 
int dx[]={0,0,-1,1},dy[]={-1,1,0,0};//利用两个数组实现上下左右上下左右 
struct Mes{
    int x;
    int y;
    int step;
};

int bfs(struct Mes mes)
{ 
    queueque;
    que.push(mes);
    Mes mmes;
    int nx;
    int ny;
    b[mes.y][mes.x]=1;
    while(!que.empty()) 
    {
    	mmes=que.front();
    	if(mmes.step>=k)//注意这里的"=" 
    	break;
    	que.pop();
    	for(int i=0;i<4;i++)
    	{
    		mes.x=mmes.x+dx[i];
    		mes.y=mmes.y+dy[i];
    		mes.step=mmes.step+1;//走过的路被标记了,不会再走了,只会转弯。 
    		while(1)
    		{
    			if(mes.x>=0&&mes.x=0&&mes.y

  以前写DFS的时候四个方向都是用的,if-else语句判断,现在用两个数组保存舒服多了。

   加油,这只是最简单的搜索。

 我是参照这篇博客的:https://blog.csdn.net/mengxiang000000/article/details/50448875

你可能感兴趣的:(HDU)