【Breadth-first Search 】934. Shortest Bridge

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/flying_all/article/details/85932059

输入:一个二维数组,每个元素的值为0/1。
规则:所有连在一起的1是一个岛屿,数组中包含2个岛屿。连在一起是指上下左右4个方向。可以将0变为1,将2个岛屿链接在一起。
输出:最小改变多少个0就可以将2个岛屿链接在一起。
分析:数组中只有2个岛屿。可以先遍历数组找到第一个值为1的坐标。DFS找到第一个岛屿。将第一个岛屿的所有坐标放入队列。作为BFS的起点坐标。沿着这些坐标向外扩展。看看最先找到值为1的坐标需要经过几层BFS遍历。无论是DFS还是BFS的遍历都要防止一个位置多次处理。
代码
分析2:用另外尺寸相同的数组colors标识2块岛屿。然后将其中一个区域的坐标放入队列,另外一个区域的坐标作为target。从队列中的坐标开始,用bfs遍历,直到遇到target中的坐标。这里学习的一个技巧是处理横纵坐标,可以用一个整数代替。例如数组3行4列。第0行第0位数字0表示。第0行第1位用数字1表示…第1行第1位用数字5表示。如果用m表示行,n表示列,数值x表示第x/n行,第x%n列。
代码

猜你喜欢

转载自blog.csdn.net/flying_all/article/details/85932059