سلام في مسألة حيرتني كتير وهي التالي:
يوجد لدينا مصفوفة ثنائية
مثال
1 0 1
2 3 5
8 9 0
أريد ان اوجد افضل طريق بحيث يمكن ان انتقل من اليمين لليسار ومن السطر الحالي الى الأسفل فقط
مثال لا على التعيين يمكن ان يكون الطريق الامثل هو
1+0+1+2+3++9+0
لتوضيح كيفة العبور
اوجدت الحل بطريقة عودية بس بدي اسالكم عليها إذا ما فيها سئلة
حيث ان التابع العودي يجب عليه ان يقوم بفحص كل الخيارات الممكنة بالجمع
A مصفوفة الأرقام
i السطر الذي اتعامل معه
low,high أبعاد المصفوفة
sum ايجاد مجموع الأرقام لكل
save co آخر عمود يقف عليه
,نقوم آخر كل استدعاء عودي بحذف الرقم من اجل ايجاد مجموع طريق جديد
الكود لسى قيد التجربة بس المشكلة انو بدي الفكرة
إذا حدا ممكن يعطيني فكرة حل او رابط منشان طريقة تكرارية بدون عودية
بكون مشكور
او إذا حدا عندو طريقة من عندو ارجو انو تشرحولي ياها ولكم جزيل الشكر
اعرف الكود بدائي لا تقولولي بس كم فكرة
void Find root (i:int , A: Array ,low,high :int , & sum ,save co:int ,m:int )
begin
if (i<m)
for (k:=low ; k<= high ; k++)
sum =sum +A[k]
push(way,i,k)
if save co<k)
for j=k to sav co
sum=sum+ A[j]
push(way,i,k)
else if save co > k
for j= save co to k-1
sum=sum+ A[j]
push(way,i,k)
save co =k
find root (i+1,A ,low ,high ,...)
sum=sum - a[k];