[问题] 辨别二维区块的方式?

楼主: ej03xu3 (Touerin)   2016-07-22 10:30:50
假设有一个10*10的二维矩阵
0 0 0 0 0 0 0 0 0 0
0 0 1 1 1 1 1 0 0 0
0 1 1 1 1 1 1 1 0 0
0 1 1 1 1 1 1 0 0 0
0 0 1 1 1 1 1 0 0 0
0 0 0 1 1 0 0 0 0 0
0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 1 1 1 0
0 0 0 0 0 1 1 1 1 0
0 0 0 0 0 0 0 0 0 0
其中有两块有含数字1的封闭区块
在你不知道这两块的位置和大小的情况下
你只知道二维矩阵的值有1有0
要怎么分辨这两个区块呢?
例如写成A和B区块 变成:
0 0 0 0 0 0 0 0 0 0
0 0 A A A A A 0 0 0
0 A A A A A A A 0 0
0 A A A A A A 0 0 0
0 0 A A A A A 0 0 0
0 0 0 A A 0 0 0 0 0
0 0 0 0 0 0 0 B 0 0
0 0 0 0 0 0 B B B 0
0 0 0 0 0 B B B B 0
0 0 0 0 0 0 0 0 0 0
作者: blc (Anemos)   2016-07-23 08:45:00
flood fill
作者: noonee (我和烤肉间只差一撮孜然)   2016-07-24 01:13:00
首先你要定义 假设一个2x2矩阵 11和22是1 12和21是0这样算不算1是连起来的? 还是一个1他对角的也要是0才算分开你有了明确得"区块"的定义 就可以用扫描的方式找出来了
作者: alen332l (alen3321)   2016-07-25 17:57:00
用Breadth-First-Search矩阵元素定为Vertex定义“相邻”的元素之间,有Edge连接然后就可以套入BFS了 效率为O(|V|+|E|)在这个例子里面|V|为行数x列数 mxn|E|约和|V|差不多(虽然约为4倍,但同样complexity)BFS在你矩阵很大时 效率比暴力法好不过如果你矩阵不大 较没差
作者: Sunal (SSSSSSSSSSSSSSSSSSSSSSS)   2016-07-26 13:25:00
推楼上方法 找本资料结构教科书来看 BFS一定有教

Links booklink

Contact Us: admin [ a t ] ucptt.com