ধরুন আমাদের কাছে দুটি অ্যারে আছে rowSum এবং colSum যেখানে নন-নেগেটিভ মান রয়েছে যেখানে rowSum[i]-এ ith সারির উপাদানগুলির যোগফল রয়েছে এবং colSum[j]-এ একটি 2D ম্যাট্রিক্সের jth কলামের উপাদানগুলির যোগফল রয়েছে। আমাদেরকে সাইজের অ-নেতিবাচক মানের (rowSum size x colSum size) সহ যে কোনো ম্যাট্রিক্স খুঁজে বের করতে হবে যা প্রদত্ত rowSum এবং colSum মানকে সন্তুষ্ট করে।
সুতরাং, ইনপুট যদি rowSum =[13,14,12] colSum =[9,13,17] এর মত হয়, তাহলে আউটপুট হবে
| 9 | 4 | 0 |
| 0 | 9 | 5 |
| 0 | 0 | 12 |
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- ম্যাট্রিক্স :=খালি ম্যাট্রিক্স তৈরি করুন
- পরিদর্শন করেছেন :=একটি নতুন সেট
- একটি ফাংশন ন্যূনতম() সংজ্ঞায়িত করুন। এটি r,c লাগবে
- মিনিট_টোটাল :=ইনফিনিটি
- টাইপ :=ফাঁকা স্ট্রিং
- আমি 0 থেকে r - 1 এর পরিসরে, কর
- যদি r[i]
- সূচক :=i
- টাইপ :='সারি'
- মিনিট_টোটাল :=r[i]
- যদি r[i]
- যদি c[i]
- মিনিট_টোটাল :=c[i]
- টাইপ :='col'
- সূচক :=i
- r[index] :=অসীম
- আমি 0 থেকে c - 1 এর পরিসরে,
- করুন
- যদি c[i] অসীম এবং c[i]>=মিনিট_মোট সমান না হয়, তাহলে
- c[i] :=c[i] - min_total
- ম্যাট্রিক্স[ইনডেক্স, i] :=মিনিট_মোট
- লুপ থেকে বেরিয়ে আসুন
- যদি c[i] অসীম এবং c[i]>=মিনিট_মোট সমান না হয়, তাহলে
- c[index] :=অসীম
- আমি 0 থেকে r - 1 এর পরিসরের জন্য, কর
- যদি r[i] অসীম এবং r[i]>=মিনিট_মোট সমান না হয়, তাহলে
- r[i] :=r[i] - মিনিট_মোট
- ম্যাট্রিক্স[i, সূচক] :=মিনিট_মোট
- লুপ থেকে বেরিয়ে আসুন
- যদি r[i] অসীম এবং r[i]>=মিনিট_মোট সমান না হয়, তাহলে
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
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]]