2012-10-15 5 views
8

यहाँ उदाहरण (काले वाले बढ़ रहा है) है:2 डी सरणी में समान कोशिकाओं के समूह को कैसे गिनें?

इनपुट:

enter image description here

उत्पादन:

5 4 // 5 groups (4 squares each) 
1 1 // 1 group containing 1 square 

अब के लिए, मैं कुछ भी करने के लिए एक painfull की तुलना में बेहतर नहीं सोच सकते हैं यात्रा। क्या इन समूहों को रिकर्सन तरीके से प्राप्त करना संभव होगा? धन्यवाद

+0

मैं इनपुट नहीं देख सकते हैं साथ connected component labeling के लिए एल्गोरिथ्म का उपयोग कर सकते हैं! – elyashiv

+1

"समूह" के रूप में क्या मायने रखता है? आयत? निरंतर काला क्षेत्र? – phimuemue

+0

अच्छी तरह से, तस्वीर एक 2 डी सरणी इनपुट है, काले क्षेत्रों का समूह एक दूसरे के बगल में स्थित काले वर्गों के ब्लॉक हैं (तिरछे lyin गिनती नहीं है) – Patryk

उत्तर

2

सभी काले वर्गों को नोड्स के रूप में सेट करें। काले वर्गों के बीच कनेक्शन (यदि वर्ग एक-दूसरे के बगल में हैं) एक किनारे होंगे।

यह आपको graph देता है।

ग्राफ में DFS आपको सभी समूह मिल जाएगा। ध्यान दें कि डीएफएस प्रकृति द्वारा पुनरावर्ती है।

0

शुरुआत में, प्रत्येक सेल "परिकल्पना" हो।

मैं तब तक कोशिकाओं के माध्यम से पुन: प्रयास करूंगा जब तक कि आप "अनवरोधित" ब्लैक सेल को पूरा न करें। प्रत्येक सफेद सेल जिसे आप उस बिंदु तक दबाते हैं

एक बार जब आप एक काला सेल हिट करते हैं, तो आप इसे संभवतः सभी दिशाओं में "विस्तारित करें" ("बाढ़ भरने" के समान)। आप तब तक विस्तार करते हैं जब तक आप सभी विज़िट किए गए सेल को "विज़िट" के रूप में चिह्नित कर सकते हैं। ऐसा करने के बाद, आप गिनते हैं कि आपने कितने काले कोशिकाओं को संक्रमित किया है, और आप जानते हैं कि समूह कितना बड़ा था। समूह का पता लगाने के बाद, आप अगले "अनजान" ब्लैक सेल पर जाते हैं।

संबंधित मुद्दे