并查集练习 — 扩展问题(二)

根据并查集练习 —岛屿数量的问题再次扩展:
原题是给定一个二维数组matrix(char[][]),里面的值不是1就是0,上、下、左、右相邻的1认为是一片岛。返回matrix中岛的数量。
扩展为:如果是中国的地图,1表示沙砾,0表示水。这种情况下,matrix数组会非常非常大,怎么采用分治的思想来求土地(岛屿)的数量。

总的来说是进行拆分,分别求出每一块的土地数量后,再次进行合并。比如说:二维数组如图所示
并查集练习 — 扩展问题(二)_第1张图片
它是一个岛,但是太大了,如何进行拆分以及整合。
并查集练习 — 扩展问题(二)_第2张图片
可以在中间任意位置进行切割,此时左右两边互相不知道信息,分别拆分,左侧可拆分出来A,B两个岛屿,右侧可拆分出来C,D,E三个岛屿,拆分的同时收集边界信息,看那些岛屿(根据图中颜色划分)属于哪个边界。A,B,C,D,E共5个样本而后根据边界找parent。如果不相等,边界union。

你可能感兴趣的:(leetCode,算法,java,并查集,算法)