الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

ايجاد اقصر طريق من اول عمود إلى اخر عمود بالمصفوفه

مغلق
بدأه elissa في 2 مايو 2007 · 11 رد · 1,046 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم و رحمه الله و بركاته اتمنى من احد ان يساعدني و جزاه الله الف خير فانى بحاجه ماسه للمساعده

ارجوا ان اجد الاجابه بهذا المنتدى الجميل

--------------------------------------------------------------------------

السوال

لدينا مصفوفه , كل خانه في هذه المصفوفه لها قيمه و المطلوب ايجاد طريق من اول المصفوفه إلى اخر عمد فيها بحيث يكون هذا الطريق ذو اقل مجموع قيم

و يحق لك فقط التحرك في هذه الاتجاهات

0 0 0

your here 0 0

0 0 0

هذا هو السوال بالغه الانجليزيه:

The Matrix Problem is the situation where you must travel from left to right through an N X N matrix such as the 6 X 6 matrix shown below:

matrix.jpg

Notice each cell in the matrix has an associated cost. You begin in the leftmost column and select a starting cell. You may not move up or down an element in the same column, you must always move to the next column towards the right; moving either diagonally or directly to the cell on the right. The goal of the problem is to minimize the cost traveling from left-most to the right-most column such that the sum of the cost of each cell along the path is at a minimum.

Dynamic Programming algorithm. The path followed by the dynamic programming solution is marked in red:

dynamic.jpg

The total cost of the dynamic programming algorithm is 8.

هذا حلي لكن الناتج غلط فكيف يمكن ان اعدل عليه حتى احصل على الناتج الصح:

#include <iostream>

using namespace::std;

const int q1=4;

const int q2=4;

double Array[q1][q2]={16,5,4,6,2,5,1,9,8,7,6,5,4,3,2,1};//global variable

double Array2[q1][q2]={16,5,4,6,2,5,1,9,8,7,6,5,4,3,2,1};

//-------Class Object----------

class Object

{

public:

double cost;

int i,j;

};

//-------------------------------

//-----------fuction smallest , return the value of smallest element-------

double smalest(Object A,Object B,Object C)

{

double min;

min=A.cost;

Array2[A.i][A.j]=-1;

if(min>B.cost)

{ Array2[A.i][A.j]=Array[A.i][A.j];

min=B.cost;

Array2[b.i][b.j]=-1;

}

if(min>C.cost)

{ cout<<"in C loop "<<min<<"\n";

Array2[b.i][b.j]=Array[b.i][b.j];

Array2[A.i][A.j]=Array[A.i][A.j];

min=C.cost;

Array2[C.i][C.j]=-1;

}

return min;

}

//---------------------------------------------------------------------------

//------------------function shortest find the shortest path ---------------

Object shortest(int i,int j,int Jmax)

{

if(j>Jmax || i<0 ||i>=q1 )

{Object noValue;

noValue.cost=100000;

return noValue;

}

if(j==Jmax)

{Object temp;

temp.cost=Array[j];

temp.i=i;

temp.j=j;

return temp;

}

else

{

Object value;

value.cost= smalest(shortest(i,j+1,Jmax),shortest(i+1,j+1,Jmax),shortest(i-1,j+1,Jmax))+Array[j];

value.i=i;

value.j=j;

return value;}

}

//--------------------------------------------------------------------------------

int main()

{

Object cost;

cost =shortest(1,0,3);

cout<<cost.cost<<"\n";

for (int i=0;i<q1;i++)

{

for (int j=0;j<q2;j++)

cout<<Array2[j]<<" ";

cout<<"\n";

}

cout<<"\n";

for ( i=0;i<q1;i++)

{

for (int j=0;j<q2;j++)

cout<<Array[j]<<" ";

cout<<"\n";

}

return 0;}

------------------------------------------------------------------

اتمنى ان يساعدني احد ساكون ممتنه لكم جميعا فانا في ورطه

و اتمنى من الله ان يوفقنا جميعا

#2

السؤال غير واضح

ارجوا الشرح اكثر عن طريق مثال يحتوي حل صحيح

#3

مثلا شوف اللون الاحمربس لا تهتم باللي بالون الازرق:

1-يطلب من اليوزر يدخل موقع اي خليه من العمود الاول(في هذخه الحاله دخل 5و0 اللي قيمته 3

2- البرنامج بس يقدر يمشي

i,j+1

i-1,j+1

i+1,j+1

عشان يلقه الطريق اللي تكون قيمته اقل بحيث ان كل خليه موجود قيمتها عليها

each cell in the matrix has an associated cost. You begin in the leftmost column and select a starting cell. You may not move up or down an element in the same column, you must always move to the next column towards the right; moving either diagonally or directly to the cell on the right. The goal of the problem is to minimize the cost traveling from left-most to the right-most column such that the sum of the cost of each cell along the path is at a minimum.

dynamic.jpg

ارجو ان تساعدني

و جزاك الله الف خير

و اشكرك كثيرا على ردك يا اخي

#4

جرب الحل المرفق

Project2.rar

#5

نعم البرنامج الذي بعثته يعمل \

اشكرك جزيل الشكر يا اخي و فقك الله و ساعدك بتحقيق طموحك

و لكن هل تستطيع اعطائي الكود او البرمجه التي استخدمتها

او الالقرثم (الطريقه)التي استخدمتها و ساكون بغايه الامتنان لك

شكككككككككككككككككككككككككككككككككرن لك يا اخي

#6

هاي شكرا على مساعدتك بس هل ممكن ان تضع الكود بصيغه السي بلس او جافه لو سمحت او ان تضع طريقه الحل لان الملف الذي بعثته هو بصيغه

exe

و شكرا لك

my email is: dont_worry_be_happy55@yahoo.com

تم تعديل هذه المشاركة بواسطة elissa في 3 مايو 2007 في 11:34

#7

الكود مصنوع بلغة delphi

للاسف لا اعرف لغة c ولا جافا

1111.rar

#8

شكرا جزيلا على ردك وقد فهمت الكود لكن لدي بعض الاسئله به ,في البرنامج ماذا تخزن ب هذه الفاريبل , اقصد في هذا البرنامج لايجاد اقصر طريق ماذا يخزن بهم :

s

vact

vactend

som

#9

s المجموع المؤقت

vact الطريق المؤقت

som المجموع النهائي

vactend الطريق النهائي

البرنامج يجرب كل الاحتمالات وكل ما وجد مجموع s اقل من som يضعه في مكان som

ويأخذ الطريق الموافق vact ويضعه في مكان vactend

#10

شكرا لك مره اخرى و كن ما ذا يفعل هذا السطر (بالون الاحمر)

function add(i,j,s:longint):longint;

begin

s:=s+table[i,j];

vact[j]:=i;

if j=6 then

begin

if s<som then

begin

som:=s;

vactend:=vact; <-------------------------------what is happening here ,is it equal to vactend[j]:=vact[j] or are u copy all the array

end;

end

else

begin

add(i,j+1,s);

if i<6 then add(i+1,j+1,s);

if i>1 then add(i-1,j+1,s);

end;

end;//fun

#11

هل تستطيش الشرح كيف يعمل البرنامج لو تستطيع

#12

هناك طريقة لفهم الحل

ضع مثال ثم قم بتتبع مراحل البرنامج حتى يصل الى الحل

سوف تفهم كل متغير ماهي فائدته

ملاحظة : البرنامج يستعمل طريقة الدالة التراجعية

بالنسبة لي فانا مشغول ربما بعد ايام استطيع

ان اقدم شرح اكثر

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…