मान लीजिए कि हमारे पास गैर-ऋणात्मक मानों के साथ दो सरणियाँ हैं 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]]