查看: 1909| 回复: 9
跳转到指定楼层
上一主题 下一主题
收起左侧

[其他] bfs时到底什么情况下要加一层size for

全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
如题一直很蒙蔽
  有的题,bfs遍历
    弹出一个点
     就开始处理newX, newY
  有的题
需要  加一层 当前q的size的loop
   while(q不为空){
       for(int i=0;i<q.size();i++){
             当前元素=q.poll()
              //newX, newY
        }
   }

我的 问题是:
   有什么规律可以follow: 啥时候要加 ,啥时候不加 这个
for(int i=0;i<q.size();i++)

上一篇:一道编程信号的n变态的题
下一篇:分享一个Google Sheet刷题记录模板
全局:
bfs是层层推进的,当你需要知道你进行到哪一层的时候,就要取size。有些时候可以把层数作为一个变量定义在queue的元素里面,可以避开size。

评分

参与人数 2大米 +2 收起 理由
易兰小猫 + 1 赞一个
shingo43 + 1 很有用的信息!

查看全部评分

回复

使用道具 举报

全局:
只要你想知道啥时候一行结束,都要加啊,不然当前行的孩子也进queue了,你poll出来那个孩子的时候并不知道已经是下一行了

评分

参与人数 1大米 +1 收起 理由
argumentt + 1 赞一个

查看全部评分

回复

使用道具 举报

🔗
banffcloud 2021-5-31 02:40:54 | 只看该作者
全局:
当你处理每一个node的时候需要知道它属于哪一层(到src距离相等的为一层), 要用这个q.size()构建forloop
可以看下把binary tree变成List<List<>> 那道题。

评分

参与人数 2大米 +2 收起 理由
violinsonata266 + 1 给你点个赞!
14417335 + 1

查看全部评分

回复

使用道具 举报

🔗
 楼主| 美帝马甲 2021-5-31 08:44:30 | 只看该作者
全局:
banffcloud 发表于 2021-5-31 02:40
当你处理每一个node的时候需要知道它属于哪一层(到src距离相等的为一层), 要用这个q.size()构建forloop
...

yes 这正是答案
回复

使用道具 举报

全局:
bfs 可以处理“最短距离”,“最小次数”,这一类题目,在这一类题目中,我们每多走一步,队列会push pop多次,这里就需要用到楼主说的。像拓扑排序,树的bfs 之类的 是不需要的。
回复

使用道具 举报

🔗
 楼主| 美帝马甲 2021-5-31 11:05:45 | 只看该作者
全局:
stanlin6666 发表于 2021-5-31 10:13
bfs 可以处理“最短距离”,“最小次数”,这一类题目,在这一类题目中,我们每多走一步,队列会push pop多 ...

满分回答
回复

使用道具 举报

全局:
用Java刷时候发现必须先写一个int n =q.size()然后再loop,否则出错,不知道为什么
回复

使用道具 举报

🔗
duao119 2021-6-11 11:50:32 | 只看该作者
全局:
RELAY2014 发表于 2021-6-11 11:45
用Java刷时候发现必须先写一个int n =q.size()然后再loop,否则出错,不知道为什么

因为你在loop中通常会push新的node上去,每次check loop condition的时候size就变了…所以要用一个variable先存下来
回复

使用道具 举报

全局:
short answer:当题目要求知道层数的时候(到起点的距离)会需要这个loop
ps:是不是不应该直接用q.size在for loop,应该先存一下q.size再用吧,不然for中操作会改变q.size
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表