[問題] 辨別二維區塊的方式?

作者: 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