Python实现腐烂的橘子BFS算法时while内for循环触发无限循环的原因?
问题原因
你触发无限循环的核心原因是标记橘子腐烂的操作写错了运算符:
你写的是grid[next_row][next_col]==2,这是比较判断语句,不会修改grid里的数值,实际需要的是赋值语句grid[next_row][next_col]=2。
为什么会无限循环
- 你判断到相邻格子是新鲜橘子(值为1)之后,没有真的把它修改为腐烂状态(值为2),只是对数值做了一次无意义的相等判断
- 后续其他腐烂橘子遍历到这个坐标的时候,它的值还是1,会被反复判定为新鲜橘子,不断加入队列,导致队列永远不会为空,触发无限循环
- 哪怕你每次都给
fresh_oranges减1,也只是让这个变量变成负数,完全不会影响队列新增元素的逻辑
修正后的代码片段
if grid[next_row][next_col]==1: # 把双等号改成单等号,执行赋值操作 grid[next_row][next_col] = 2 fresh_oranges-=1 queue.append([next_row,next_col])
修改后运行对应测试用例即可得到正确结果4。
内容的提问来源于stack exchange,提问作者Sinan
相关产品推荐
相关产品推荐

