मान लीजिए हमारे पास एक मैट्रिक्स mat है। मैट्रिक्स के सेल निम्न तीन मानों में से कोई भी रख सकते हैं:
- 0 - खाली क्षेत्र
- 1 - बम
- 2 - दुश्मन
बम केवल क्षैतिज और लंबवत दिशाओं में एक छोर से दूसरे छोर तक विस्फोट कर सकता है। हमें यह जांचना है कि क्या बम विस्फोट होने पर सभी दुश्मन मारे जाएंगे या नहीं।
उदाहरण के लिए, यदि इनपुट है:
| 0 | 0 | 2 | 0 |
| 0 | 1 | 0 | 0 |
| 0 | 2 | 0 | 0 |
| 0 | 0 | 1 | 0 |
तो आउटपुट True होगा, क्योंकि स्थान [1, 1] पर बम स्थान [2, 1] पर दुश्मन को मार सकता है और स्थान [0, 2] पर दुश्मन स्थान [3, 2] पर रखे बम से मारा जाएगा।
समाधान दृष्टिकोण
हम प्रत्येक बम के लिए उसकी पूरी पंक्ति और स्तंभ को स्कैन करते हैं (अन्य बमों को छोड़कर) और सभी सेल्स को 0 (सुरक्षित) पर सेट करते हैं। अंत में जांचते हैं कि क्या कोई दुश्मन (2) बचा है।
एल्गोरिदम चरण:
r= पंक्तियों की संख्या,c= स्तंभों की संख्या- प्रत्येक सेल
mat[i][j]के लिए: - यदि यह बम (1) है:
- पूरे स्तंभ
jको स्कैन करें: यदि सेल बम नहीं है, तो उसे 0 पर सेट करें - पूरी पंक्ति
iको स्कैन करें: यदि सेल बम नहीं है, तो उसे 0 पर सेट करें - पूरे मैट्रिक्स को स्कैन करें: यदि कोई सेल 2 (दुश्मन) है, तो False लौटाएं
- True लौटाएं
पायथन कार्यान्वयन
def solve(mat):
r = len(mat)
c = len(mat[0])
for i in range(r):
for j in range(c):
if mat[i][j] == 1:
# पूरा स्तंभ स्कैन करें
for x in range(r):
if mat[x][j] != 1:
mat[x][j] = 0
# पूरी पंक्ति स्कैन करें
for y in range(c):
if mat[i][y] != 1:
mat[i][y] = 0
# जांचें कि कोई दुश्मन बचा है या नहीं
for i in range(r):
for j in range(c):
if mat[i][j] == 2:
return False
return True
matrix = [
[0, 0, 2, 0],
[0, 1, 0, 0],
[0, 2, 0, 0],
[0, 0, 1, 0]
]
print(solve(matrix)) # True
इनपुट
[ [0,0,2,0], [0,1,0,0], [0,2,0,0], [0,0,1,0] ]
आउटपुट
True
नोट:
यह एल्गोरिदम मूल मैट्रिक्स को मॉडिफाई करता है। यदि मूल मैट्रिक्स सुरक्षित रखना है, तो डीप कॉपी बनाएं।