2013-10-05 40 views
0

這是一個令我煩惱的問題。C從點陣中確定最大多邊形的算法

給定一組點,說:

1 1 1 1 
1 1 1 1 
1 1 1 1 
1 1 1 1 

最大的多邊形是一個4x4正方形。對於這一點:

0 0 1 1 1 
0 1 1 1 1 
1 1 1 1 1 

最大的是梯形的,但會有不規則的,和其他變化......

如何確定最大的可能嗎? (最大意味着不能被任何其他多邊形包圍)我應該使用什麼樣的算法?

此外,他們還需要其他屬性,如面積,周長,凸(T/F),以及不變的轉數...


這是指令中所提供,但我真的不明白究竟是關於...

呼叫編碼尺寸的任何2維陣列的2×2 50×50和之間(均尺寸可以是不同的),所有 的其元素爲0或1 致電鄰居成員m編碼任何最多八個成員的數組中的值爲1, 和兩個索引中的每一個不同於m的對應索引至多1.給定一個特定的編碼,我們 電感確定用於所有自然數d所設定的深度d的多邊形(對於這種編碼),如下所示:

設a 自然數d被給出,並且假設對於所有d < d,該組已確定深度的多邊形d 。 將所有1確定爲0的多邊形的編碼的改變。然後,深度d的多邊形集合被確定爲可通過以這種方式將1與它們的一些鄰居 連接起來從該編碼中獲得的多邊形的集合 我們得到一個最大的多邊形(也就是說,一個多邊形不包含在任何其他多邊形中,這個多邊形通過連接1和它們的一些鄰居而從編碼中獲得)。

+1

顯示您的代碼。 – Gangadhar

+2

有趣的問題。找到包含最多的「島」。聽起來像一個遞歸搜索。 –

+0

他們總是會被填滿嗎? 「最大」是指最大面積還是最大周長?另外,你有沒有試圖自己解決這個問題? – Blender

回答

0
Create some integer B, set it to zero. 

For every point p: 
    If p has not been marked as "been": 
     Mark p as "been" 
     BFS/DFS from p and count the number of adjacent reachable points. Also mark each of these points as "been". 
     If the number of reachable points + 1 is greater than B: 
      B = the number of reachable points + 1 

在結束時,B =多邊形的最大大小(以點 「覆蓋」)。

1

也許我太急躁了,但是我發現你的指示很笨拙,我可以看到你爲什麼發現他們很難理解。

您已經指定了答案,但以下是您可能希望探索的一些相關主題。

凸包可能是你想要的。通常將凸包描述爲2D空間中的點都是釘板中的釘。釘子外側周圍的橡皮筋形狀是凸包。

http://en.m.wikipedia.org/wiki/Convex_hull_algorithms

另外,操作縮小(或生長)的1和替換它們以0聽起來形態「侵蝕」操作。

http://en.m.wikipedia.org/wiki/Erosion_(morphology)