मान लीजिए कि हमारे पास एक द्विआधारी 2D मैट्रिक्स है, अब हमें 0s से भरे सभी आयतों का प्रारंभिक बिंदु और समाप्ति बिंदु खोजना होगा। हमें यह ध्यान रखना होगा कि आयताकार अलग-अलग होते हैं और एक-दूसरे को स्पर्श नहीं करते हैं, हालांकि वे सरणी सीमा को छू सकते हैं। केवल एक तत्व वाला आयत भी संभव है।
तो, अगर इनपुट इस तरह है -
1 | 0 | 1 | 1 | 1 | 0 | 1 |
1 | 1 | 0 | 1 | 1 | 1 | 1 |
1 | 0 | 1 | 1 | 0 | 0 | 1 |
1 | 0 | 1 | 1 | 0 | 0 | 1 |
1 | 0 | 1 | 1 | 0 | 1 | 1 |
1 | 0 | 1 | 0 | 0 | 0 | 0 |
1 | 1 | 1 | 0 | 0 | 0 | 1 |
1 | 0 | 1 | 1 | 1 | 0 | 1 |
तो आउटपुट [[0, 1, 0, 1], [0, 5, 0, 5], [1, 2, 1, 2], [2, 3, 2, 4], [3, 1' होगा। , 5, 1], [3, 4, 6, 5], [5, 3, 6, 5], [7, 1, 7, 1], [7, 5, 7, 5]]
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- एक फ़ंक्शन को परिभाषित करें find_rect() । यह i,j,a,output,index . लेगा
- x :=पंक्ति गणना
- y :=कॉल काउंट
- flag_col:=0
- flag_row :=0
- i से x की श्रेणी में m के लिए, करें
- यदि a[m, j] 1 के समान है, तो
- flag_row :=1
- ब्रेक
- यदि a[m, j] 5 के समान है, तो
- कुछ न करें
- n के लिए j से y की श्रेणी में, करें
- यदि a[m, n] 1 के समान है, तो
- flag_col :=1
- ब्रेक
- a[m, n] :=5
- यदि a[m, n] 1 के समान है, तो
- यदि ध्वज_पंक्ति 1 के समान है, तो
- आउटपुट के अंत में एम-1 डालें[इंडेक्स]
- अन्यथा,
- आउटपुट के अंत में m डालें[इंडेक्स]
- अगर फ्लैग_कॉल 1 के समान है, तो
- आउटपुट के अंत में n-1 डालें[इंडेक्स]
- अन्यथा,
- आउटपुट के अंत में n डालें[इंडेक्स]
- यदि a[m, j] 1 के समान है, तो
- मुख्य विधि से, निम्न कार्य करें -
- n :=एक का आकार
- op :=एक नई सूची
- आईडीएक्स:=-1
- मैं के लिए 0 से n की सीमा में, करते हैं
- जे के लिए 0 से लेकर एक [0] के आकार के लिए, करें
- यदि a[i, j] 0 के समान है, तो
- ऑप में [i,j] डालें
- idx :=idx + 1
- find_rect(i, j, a, op, idx)
- यदि a[i, j] 0 के समान है, तो
- जे के लिए 0 से लेकर एक [0] के आकार के लिए, करें
- प्रदर्शन सेशन
उदाहरण कोड
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
def find_rect(i,j,a,output,index): x = len(a) y = len(a[0]) flag_col = 0 flag_row = 0 for m in range(i,x): if a[m][j] == 1: flag_row = 1 break if a[m][j] == 5: pass for n in range(j, y): if a[m][n] == 1: flag_col = 1 break a[m][n] = 5 if flag_row == 1: output[index].append( m-1) else: output[index].append(m) if flag_col == 1: output[index].append(n-1) else: output[index].append(n) def get_coord(a): n = len(a) op = [] idx = -1 for i in range(0,n): for j in range(0, len(a[0])): if a[i][j] == 0: op.append([i, j]) idx = idx + 1 find_rect(i, j, a, op, idx) print (op) tests = [[1, 0, 1, 1, 1, 0, 1], [1, 1, 0, 1, 1, 1, 1], [1, 1, 1, 0, 0, 1, 1], [1, 0, 1, 1, 0, 0, 1], [1, 0, 1, 1, 0, 1, 1], [1, 0, 1, 0, 0, 0, 0], [1, 1, 1, 0, 0, 0, 1], [1, 0, 1, 1, 1, 0, 1]] get_coord(tests)
इनपुट
[[1, 0, 1, 1, 1, 0, 1], [1, 1, 0, 1, 1, 1, 1], [1, 1, 1, 0, 0, 1, 1], [1, 0, 1, 1, 0, 0, 1], [1, 0, 1, 1, 0, 1, 1], [1, 0, 1, 0, 0, 0, 0], [1, 1, 1, 0, 0, 0, 1], [1, 0, 1, 1, 1, 0, 1]]
आउटपुट
[[0, 1, 0, 1], [0, 5, 0, 5], [1, 2, 1, 2], [2, 3, 2, 4], [3, 1, 5, 1], [3, 4, 6, 5], [5, 3, 6, 5], [7, 1, 7, 1], [7, 5, 7, 5]]