मान लीजिए हमारे पास एक बाइनरी 2D मैट्रिक्स है। अब हमें 0 से भरे सभी आयतों के प्रारंभिक बिंदु और अंतिम बिंदु ढूंढने हैं। ध्यान रखें कि आयत अलग-अलग हैं और एक-दूसरे को स्पर्श नहीं करते, हालांकि वे सरणी की सीमा को स्पर्श कर सकते हैं। एकल तत्व वाला आयत भी संभव है।
यदि इनपुट निम्नलिखित जैसा है:
| 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]]
समाधान दृष्टिकोण
इसे हल करने के लिए हम निम्नलिखित चरणों का पालन करेंगे:
- find_rect() फंक्शन परिभाषित करें जो i,j,a,output,index लेता है
- x := सारी की संख्या, y := कॉलम की संख्या
- flag_col := 0, flag_row := 0
- m के लिए i से x तक की रेंज में:
- यदि 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
- यदि flag_row 1 है, तो output[index] के अंत में m-1 डालें
- अन्यथा, output[index] के अंत में m डालें
- यदि flag_col 1 है, तो output[index] के अंत में n-1 डालें
- अन्यथा, output[index] के अंत में n डालें
- मुख्य मेथड से:
- n := a का आकार
- op := एक नई सूची, idx := -1
- i के लिए 0 से n तक की रेंज में:
- j के लिए 0 से a[0] के आकार तक की रेंज में:
- यदि a[i, j] 0 के समान है, तो [i,j] को op में डालें, idx बढ़ाएं, find_rect() कॉल करें
- j के लिए 0 से a[0] के आकार तक की रेंज में:
- op प्रदर्शित करें
उदाहरण कोड
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]]