关于bfs的那些事

bfs

首先,他并不是一个自带的函数,而是一个自己编写的算法。
它如同一棵树:
在这里插入图片描述你把所有的路径走一遍,是一种无脑搜索算法,时间复杂度为O(V+E)
所以正常情况下,都会用哈希表来优化(剪枝)
P1141 01迷宫
这是一道很经典的bfs题
看看题目,首先需要写一个输出:

scanf("%d%d",&n,&m);
    for (int i=0;i<n;i++)
    scanf("%s",s[i]);
    memset(f,-1,sizeof(f));

然后编写bfs函数:

int bfs(int x,int y)
{
     int move[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
     book[x][y]=1;
     int nx,ny;
     while(xx.size()!=0 && yy.size()!=0)
     {       
             xx.pop();
             yy.pop();
     for(int t=0;t<4;t++)
      {

             nx=x+move[t][0];
             ny=y+move[t][1];
             w=map[x][y];
             b=map[nx][ny];
             if(book[nx][ny]==0 && w!=b && nx>0 && ny>0 && nx<=n && ny<=n)
             {                  

                                sum++;
                                book[nx][ny]=1;
                                step[nx][ny]=step[x][y]+1;
                                xx.push(nx);
                                yy.push(ny);
             }
      }
      x=xx.front();
      y=yy.front();
     }
     return sum;
}

最后的输出我就省略了。

蟹蟹观看!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值