मान लीजिए कि हमारे पास गैर-ऋणात्मक मानों के साथ दो सरणियाँ हैं rowSum और colSum जहाँ rowSum[i] में ith पंक्ति में तत्वों का योग है और colSum[j] में 2D मैट्रिक्स के jth कॉलम में तत्वों का योग है। हमें आकार के गैर-ऋणात्मक मानों (पंक्तिसम आकार x colSum आकार) के साथ किसी भी मैट्रिक्स को खोजना होगा जो दिए गए रोसम और कोलसम मानों को संतुष्ट करता है।
इसलिए, यदि इनपुट पंक्तिसम =[13,14,12] colSum =[9,13,17] जैसा है, तो आउटपुट होगा
| 9 | 4 | 0 |
| 0 | 9 | 5 |
| 0 | 0 | 12 |
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- मैट्रिक्स:=खाली मैट्रिक्स बनाएं
- विज़िट किया :=एक नया सेट
- एक फ़ंक्शन को न्यूनतम () परिभाषित करें। इसमें r,c . लगेगा
- min_total :=अनंत
- टाइप करें:=ब्लैंक स्ट्रिंग
- i के लिए 0 से लेकर r-1 के आकार तक के लिए
- अगर r[i]
- सूचकांक:=मैं
- प्रकार :='पंक्ति'
- min_total :=r[i]
- अगर r[i]
- अगर c[i]
- min_total :=c[i]
- टाइप करें:='col'
- सूचकांक:=मैं
- r[index] :=अनंतता
- i के लिए 0 से c-1 के आकार की श्रेणी में, do
- यदि c[i] अनंत के समान नहीं है और c[i]>=min_total, तो
- c[i] :=c[i] - min_total
- मैट्रिक्स[इंडेक्स, i] :=min_total
- लूप से बाहर आएं
- यदि c[i] अनंत के समान नहीं है और c[i]>=min_total, तो
- c[सूचकांक] :=अनंत
- i के लिए 0 से लेकर r-1 के आकार तक के लिए
- यदि r[i] अनंत के समान नहीं है और r[i]>=min_total, तो
- r[i] :=r[i] - min_total
- मैट्रिक्स[i, अनुक्रमणिका] :=min_total
- लूप से बाहर आएं
- यदि r[i] अनंत के समान नहीं है और r[i]>=min_total, तो
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
def solve(r, c):
matrix = [[0]*len(c) for _ in range(len(r))]
visited = set()
def minimum(r,c):
min_total = float('inf')
type = ''
for i in range(len(r)):
if(r[i] < min_total):
index = i
type = 'row'
min_total = r[i]
for i in range(len(c)):
if(c[i] < min_total):
min_total = c[i]
type = 'col'
index = i
if(type == 'row'):
r[index] = float('inf')
for i in range(len(c)):
if(c[i] != float('inf') and c[i] >= min_total):
c[i] -= min_total
matrix[index][i] = min_total
break
if(type == 'col'):
c[index] = float('inf')
for i in range(len(r)):
if(r[i] != float('inf') and r[i] >= min_total):
r[i] -= min_total
matrix[i][index] = min_total
break
visited.add((index,type))
while len(visited) != len(r)+len(c):
minimum(r,c)
return matrix
rowSum = [13,14,12]
colSum = [9,13,17]
print(solve(rowSum, colSum)) इनपुट
[13,14,12], [9,13,17]
आउटपुट
[[9, 4, 0], [0, 9, 5], [0, 0, 12]]