المخططات والشبكات

Download Report

Transcript المخططات والشبكات

‫املخططات والشبكات‬
‫‪Graphs & Networks‬‬
‫ملقرر تركيب البيانات وتصميم الخوارزميات‬
‫‪1289‬‬
‫اعداد‬
‫د‪ .‬محمد ذويـب‬
‫أهداف املادة العلمية‬
‫‪ .1‬تعريف مفهوم املخططات والشبكات وتميز بينهما‪.‬‬
‫‪ .2‬تمثل املخططات والشبكات بطرق مختلفة‪.‬‬
‫‪ .3‬تستطيع استخدام خوارزمية ‪Dijkstra‬إليجاد‬
‫اقصر ممر بين زوجين من العناصر‪.‬‬
‫‪ .4‬تستطيع استخدام خوارزمية ‪ Floyed‬إليجاد‬
‫اقصرممر بين زوجين من العناصر‪.‬‬
‫املخططـات‬
‫‪GRAPHSKS‬‬
‫الشبكـات‬
‫‪NETWORK‬‬
‫اوال‪:‬املخططات (‪)Graphs‬‬
‫تعريف املخططات‬
‫هي تراكيب بيانات تشبه الهياكل الشجرية‬
‫في التمثيل الرياض ي‬
‫حيث تمثل الهياكل الشجرية نوع من أنواع‬
‫املخططات‬
‫أما في برمجة الحاسوب فان املخطـطات تستعمل‬
‫بطريقة تختلف عن الهياكل الشجرية‬
‫وما يميزها‬
‫قلة القيود عليها‬
‫مقارنة بالهياكل الشجريةومن املمكن للعناصر‬
‫أن تؤشر الى بعضها‬
‫بمعنى آخر‬
‫ليس هناك عالقة أبوة وأبناء في املخططات‬
‫فاملخططات في اغلب األحيان لها شكل موحد‬
‫لتمثيل مشكلة طبيعية‬
‫فمثال يمكن ان تمثل مجموعة الرؤوس في املخطط‬
‫املدن بينما الحواف يمكن ان تمثل الطريق الواصلة‬
‫بين هذه املدن‬
‫وعلى اي حـال‬
‫فان املخطط ال يعكس املواقع الجغرافية‬
‫بل يعكس واقع العالقات بين املواقع واملمثلة‬
‫في القمـم (‪)Vertices‬‬
‫والطرق الواصلة بينها (‪)Edges‬‬
‫ويمكن أن تمثل الحواف في بعض االحيان على شكل‬
‫أقواس باإلضافة الى الخطوط املستقيمة‬
‫تتكون املخططات من جزئيين رئيسين هما ‪:‬‬
‫‪ .1‬مجموعة من العناصر (‪)Element‬‬
‫او العقد (‪ )Node‬وتسمى الرؤوس ‪V‬‬
‫)‪(Vertices‬‬
‫‪ .2‬مجموعة الحواف )‪E (edge‬‬
‫وبناء عليه فان املخطط يشار اليه كما يلي‪:‬‬
‫)‪G=(V,E‬‬
‫انـواع املخططات‬
‫‪Graphs Type‬‬
‫يوجد نوعان رئيسيان من املخططات هي‪:‬‬
‫‪ ‬املخططات الغير متجهة‬
‫(‪)UNDIRECTED GRAPHS‬‬
‫‪ ‬املخططات املتجهة‬
‫( ‪)DIGRAPH‬‬
‫اوال‪:‬‬
‫املخططات الغير متجهة‬
‫(‪)UNDIRECTED GRAPHS‬‬
‫يكون املخطط غير متجه‬
‫عندما تكون كل حافة تصل بين زوج‬
‫من القمم الغير مرتبة‬
‫وكذلك إذا لم تحدد الحواف التي تربط‬
‫بين رؤوس املخطط باتجاه معين‬
‫وفي هذه الحالة‪:‬‬
‫تكون القمة (‪)v1,v2‬‬
‫مكافئة للقمة (‪)v2,v1‬‬
v2
v1
v3
v4
v5
‫ثانيا‪:‬‬
‫املخططات املتجهة‬
‫(‪)DIGRAPHS‬‬
‫املخطط يسمى متجه إذا كانت كل حافةفي املخطط‬
‫تربط بين زوج مرتب من القمم‬
‫ويكون هناك على األقل ممرواحد‬
‫من كل قمةالى قمةأخرى‬
‫ومحددا بسهم يشير الى تلك القمة‬
v1
v2
v4
v3
v6
v5
v7
‫تمثيل املخططات‬
‫‪Representation of Graphs‬‬
‫هناك عدة طرق لتمثيل املخططات منها‪:‬‬
‫‪ .1‬القوائم املتصلة‬
‫‪ .2‬مصفوفة الجوار (‪)Adjacency Matrices‬‬
‫)‪(Linked Representation‬‬
‫اوال ‪:‬‬
‫القوائم املتصلة (‪)Linked Representation‬‬
‫تعتبر من ابسط الطرق إستخداما‬
‫فإستعراض املخطط يتضمن زيارة كل قمة في‬
‫املخطط مرة واحدة فقط فالخوارزميات التي تطبق‬
‫في الهياكل الشجرية ال يمكن أن تطبق هنا‬
‫الن املخطط قد يحتوي على دوران‬
‫لذلك خوارزمية االستعراض الشجري‬
‫من املمكن أن تؤدي الى تكرار ال نهائي‬
‫ملنع ذلك من الحدوث‬
‫كل رأس تمت زيارته يمكن أن يسجل‬
‫لتجنب زيارته مرة أخرى‬
‫مع ذلك من املمكن أن تحتوي املخططات‬
‫على قمم معزولة(غير متصلة)‬
‫مما يعني أن بعض أجزاءاملخطط‬
‫من املمكن أن تحذف إذا تم تطبيق منهج‬
‫االستعراض الشجري‬
‫مثـال‪:‬‬
‫مثل املخطط التالي باستخدام مؤشرات الربط‬
‫‪1‬‬
‫‪4‬‬
‫‪2‬‬
‫‪3‬‬
‫الحـل‪:‬‬
‫يتم تمثيل املخطط كي يشمل قائمتين‪:‬‬
‫‪ .1‬قائمة العناصر‬
‫‪ .2‬قائمة الحـواف‬
‫قائمــة الحواف‬
‫‪NULL‬‬
‫‪4‬‬
‫‪3‬‬
‫‪2‬‬
‫قائمة‬
‫العناص‬
‫ر‬
‫‪1‬‬
‫‪NULL‬‬
‫‪4‬‬
‫‪3‬‬
‫‪1‬‬
‫‪2‬‬
‫‪NULL‬‬
‫‪4‬‬
‫‪2‬‬
‫‪1‬‬
‫‪3‬‬
‫‪NULL‬‬
‫‪3‬‬
‫‪2‬‬
‫‪1‬‬
‫‪4‬‬
‫ثانيا ‪:‬‬
‫مصفوفة الجوار‬
‫(‪)Adjacency Matrices‬‬
‫هي عبارة عن مصفوفة ثنائية األبعاد‬
‫التي تحددجميع القمم املجاورة‬
‫لكل قمة في املخطط‬
‫فمصفوفة الجوار )‪A(aij‬هي مصفوفة من الحجم‬
‫‪ n x n‬حيث يوضع في املوقع ‪ aij‬قيمة الوزن‬
‫اذا كان هناك حافة‬
‫من القمة ‪ i‬الى القمة ‪j‬‬
‫ويوضع ‪ 0‬اذا لم يكن هناك حافة تربط بين الرأسين‬
‫وبشكل عام العالقة التالية تمثل مصفوفة‬
‫‪aij := 1 if there is an edge from‬‬
‫‪i‬‬
‫‪to‬‬
‫‪j‬‬
‫الجوار ‪:‬‬
‫‪0 if there is no edge‬‬
‫مثـال ‪:‬‬
‫مثل الشكل التالي باستخدام مصفوفة الجوار‬
‫‪v2‬‬
‫‪v1‬‬
‫‪v4‬‬
‫‪v5‬‬
‫‪v7‬‬
‫‪v3‬‬
‫‪v6‬‬
‫الحـل‪:‬‬
‫يمكن تمثيل املخطط السابق بمصفوفة الجوار‬
‫التالية‪:‬‬
‫‪V V V V V V V‬‬
‫‪7‬‬
‫‪6‬‬
‫‪5‬‬
‫‪4‬‬
‫‪3‬‬
‫‪2‬‬
‫‪1‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0‬‬
‫‪1‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0‬‬
‫‪1‬‬
‫‪0‬‬
‫‪V1 0‬‬
‫‪V2 0‬‬
‫‪0‬‬
‫‪0‬‬
‫‪1‬‬
‫‪1‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0‬‬
‫‪1‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0‬‬
‫‪1‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0‬‬
‫‪V3 1‬‬
‫‪V4 0‬‬
‫‪V5 0‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0‬‬
‫‪1‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0‬‬
‫‪V6 0‬‬
‫‪V7 0‬‬
‫نالحظ ان مصفوفة الجوار تحتوي دائما‬
‫على العنصرين ‪ 0‬و ‪1‬‬
‫ولهذا السبب‬
‫ّ‬
‫البولية‬
‫يطلق عليها املصفوفة‬
‫حساب الحواف الداخلة والخارجة‬
‫من كل قمـة‬
‫في املخطط باستخدام مصفوفة الجوار‬
‫لحساب عدد الحواف الداخلة‪:‬‬
‫نستعمل رقم العنصر ‪ n‬كدليل للعمود‬
‫في مصفوفة الجوار ونحسب عدد مرات تكرار‬
‫الرقم ‪ 1‬في مصفوفة الجوار‬
‫وبنفس الطريقة لحساب الحواف الخارجة‪:‬‬
‫حيث نستخدم رقم العقدة ‪ n‬كدليل الصف‬
‫في مصفوفة الجوار ونحسب عدد مرات حصول‬
‫الرقم ‪ 1‬في ذلك الصف ويمثـل عدد مرات‬
‫حصول الرقم ‪ 1‬عدد الحواف الخارجة من كل‬
‫عقدة في املخطط‪.‬‬
‫مثـال ‪:‬‬
‫لحساب الحواف الداخلة والخارجة من والى كل‬
‫عنصر في املخطط باستخدام تمثيل مصفوفة‬
‫الجوار نكتب الدوال التالية‪:‬‬
‫)‪buildadjm(intadj[][MAX], int n‬‬
void buildadjm(int adj[][MAX], int n)
{
int i,j;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
cout<<"Enter 1 if there is an
edge from "<< i <<" “
<< "to" <<" "<< j <<"
otherwise enter 0 "<<endl;
cin>>adj[i][j];
} }
‫حل املثال‪:‬‬
‫ثم نبني الدالة‬
‫‪indegree‬‬
‫حيث تحسب عدد مرات ظهور الرقم ‪1‬‬
‫في كل عمود في مصفوفة الجوار باستخدام‬
‫رقم العقدة التي سيتم حساب الحـواف الداخلة لها‬
‫والذي يمثل دليل املصفوفة‬
:‫وهي كالتالي‬
Int indegree
(intadj[][MAX],intx,int n)
{
int i, count =0;
for(i=0;i<n;i++)
if( adj[i][x] ==1)
count++;
return(count);
}
‫حل املثال ‪:‬‬
‫ثم نبني الدالة‬
‫‪outdegree‬‬
‫حيث تحسب عدد مرات ظهور‬
‫الرقم ‪1‬في كل صف من مصفوفة‬
‫الجوار باستعمال رقم العقدة (الرأس)‬
‫التي ستحسب لها عدد الحواف‬
:‫وهي كالتالي‬
int outdegree(int adj[][MAX],int x,int n)
{
int i, count =0;
for(i=0;i<n;i++)
if( adj[x][i] ==1)
count++;
return(count);
}
:‫حل املثال‬
: ‫وهنا يكون البرنامج الرئيس ي كالتالي‬
void main()
{
int adj[MAX][MAX], n, i;
cout<<"Enter the number of nodes
in graph maximum =
“ <<MAX<<endl;
cin>>n;
buildadjm(adj,n);
for(i=0;i<n;i++){ cout<<"The indegree
of the node "<<i<<" is”
<<indegree(adj,i,n)<<endl;
cout<<"The outdegree of the
node“<<i<<"is”
<<outdegree(adj,i,n)<< endl;
}
}
‫شرح البرنامج‪:‬‬
‫‪ .1‬يقوم هذا البرنامج أوال ببناء مصفوفة الجوار‬
‫من خالل مناداة الدالة‪buildadjm‬بعد‬
‫ذلك يدخل في حلقة التكرار لحسـاب الحواف‬
‫الداخلة والخارجة لكل عقدة في املخطط‬
‫من خالل مناداة الدوال‪...........‬‬
‫‪indegree‬و‪outdegree‬على التوالي‪.‬‬
‫‪ .2‬الدالة‪ indegree‬تحسب عدد مرات‬
‫ظهور الرقم ‪ 1‬في كل عمود في مصفوفة‬
‫الجوار بإستخدام رقم العقدة الـتي‬
‫سيتم حساب الحواف الداخلة لها والذي‬
‫يمثل دليل املصفوفة‪.‬‬
‫‪ .3‬الدالة‪ outdegree‬تحسب عدد‬
‫مرات ظهور الرقم ‪ 1‬في كل صف‬
‫من مصفوفة الجوار بإستعمال رقم‬
‫العقدة التي ستحسب لها عدد الحواف‪.‬‬
‫ثانيا‪:‬‬
‫الشبكات‬
‫‪NETWORKS‬‬
‫تعرف الشبكة على انها مخطط هندس ي‬
‫يتكون من نقطة بداية ‪ A‬ونقطة نهاية ‪ F‬متصالت‬
‫فيما بينهما بمجموعة متتابعة من العقد ‪Nods‬‬
‫متصلة معا بعدد من الحواف ‪Edges‬‬
‫‪Diagram‬‬
‫(كل حافة تصل بين نقطتين او اكثر )‬
‫ولكل حافة من حوافه قيمة عددية موجبة‬
‫تمثل‬
‫وزن تلك الحافة‬
‫طرق ايجاد اقصر املمرات‬
‫‪SHORTEST PATH‬‬
‫ان ايجاد اقصر املمرات في املخطط الشبكي‬
‫يعتمد على وجود ممر بين كل قيمتين في املخطط‬
‫بحيث يكون مجموع اوزان الحواف هو االقل‬
‫فمثال‪:‬‬
‫إليجاد الطريق األسرع للوصول من موقع الى آخر‬
‫في مخطط الطرق‬
‫نعمل على ايجاد اقصر املمرات بين هذه املواقع‬
‫من خالل فحص جميع الطرق املؤدية الى املوقع‬
‫املطلوب بداية من نقطة االنطالق‬
‫ونهــاية الى الوجهة املقصودة‬
‫وإليجاد اقصر املمرات نستخدم احدى الطريقتين ‪:‬‬
‫‪ .1‬الطريقة االولى ‪:‬‬
‫باستخدام خوارزمية ديجكسترا (‪)Dijkstra‬‬
‫‪ .2‬الطريقة الثانية ‪:‬‬
‫باستخدام خوارزمية فلويد (‪)Floyd‬‬
‫• الطريقة االولى ‪:‬‬
‫باستخدام خوارزمية ديجكسترا ‪Dijkstra‬‬
‫هناك العديد من الخوارزميات‬
‫إليجاد املسافة من قمة الى اخرى في املخطط‬
‫منها خوارزمية ‪ Dijkstra‬حيث تقوم هذه‬
‫الخوارزمية على تحديد املسافة من قمة محددة‬
‫وجميع القمم االخرى في املخطط‬
‫تبدأ خوارزمية ‪ Dijkstra‬من قمة معينة‬
‫تسمى نقطة املصدر (‪ )source‬في املخطط‬
‫الشبكي وتمتد حتى تصل الى جميع القمم االخرى‬
‫في املخطط وتقوم على تخزين املسافة الكلية‬
‫من القمة املصدرية‬
‫الى القمة املراد الوصول اليها‬
‫وللتوضيح اكثر‬
‫تعمل خوارزمية ‪ Dijkstra‬على تخزين‬
‫مجموع اقل تكلفة للحواف من نقطة البداية‬
‫الى نقطة النهاية ومن الجدير بالذكر‬
‫ان كفاءة هذه الخوارزمية هو‬
‫)‪O(n2‬‬
‫تحتاج هذه الخوارزمية الى اربع مصفوفات‬
‫وهي ‪:‬‬
‫‪ ‬مصفوفة تكلفة الجوار (‪)Adjacency Matrix Cost‬‬
‫‪ ‬مصفوفة الطول (‪) Distance Matrix‬‬
‫‪ ‬مصفوفة التخزين (‪)Path Matrix‬‬
‫‪ ‬مصفوفة العناصر (‪)Include Matrix‬‬
‫املصفوفة األولى‪:‬‬
‫مصفوفة تكلفة الجوار‬
‫(‪)Adjacency Matrix Cost‬‬
‫في الشكل التالي‬
‫يظهر شك ـل الشبكة‬
A
B
C
D
‫يمكن تمثيل الشكل السابق باستخدام مصفوفة‬
‫الجوار كما يلي‪:‬‬
‫‪D‬‬
‫‪C‬‬
‫‪B‬‬
‫‪A‬‬
‫‪A TO D‬‬
‫‪A TO C‬‬
‫‪A TO B‬‬
‫‪0‬‬
‫‪A‬‬
‫‪B TO D‬‬
‫‪B TO C‬‬
‫‪0‬‬
‫‪0‬‬
‫‪B‬‬
‫‪C TO D‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0‬‬
‫‪C‬‬
‫‪0‬‬
‫‪D TO C‬‬
‫‪0‬‬
‫‪0‬‬
‫‪D‬‬
‫ويتم االعالن عن املصفوفة بلغة ‪ C++‬كالتالي‪:‬‬
‫; ]‪int COST[N][N‬‬
‫املصفوفة الثانية‪:‬‬
‫مصفوفة الطول‬
‫(‪)Distance Matrix‬‬
‫لتخزين طول اقصر الطرق من نقطه االنطالق‬
‫الى النقطه ‪ J‬وذلك في املوقع‬
‫] ‪DISTANCE[J‬‬
‫ويتم االعالن عن املصفوفة بلغة ‪ C++‬كالتالي‪:‬‬
‫;]‪int DISTANCE[N][N‬‬
‫املصفوفة الثالثة‪:‬‬
‫مصفوفة التخزين‬
‫(‪)Path Matrix‬‬
‫لتخزين العناصر التي تمر بها في اقصر املمرات‬
‫حيث ان ] ‪ path[ j‬يحتوي على النقطة السابقة‬
‫املباشره لنقطة ‪ j‬في اقصر املمرات‬
‫ويتم االعالن عن املصفوفة بلغة ‪ C++‬كالتالي‪:‬‬
‫;]‪int PATH[N‬‬
‫املصفوفة الرابعة‪:‬‬
‫مصفوفة العناصر‬
‫(‪)Include Matrix‬‬
‫ّ‬
‫وهي مصفوفة بوليه منطقيه‬
‫تحتوي على العناصر املشمولة ‪ ،‬بما في ذلك نقطة‬
‫االصل (االنطالق) ضمن اقصر املمرات لغاية هذه‬
‫اللحظه من تطبيق الخوارزمية بدءا من نقطة‬
‫االنطالق‬
‫ففي حالة شمول أي من النقاط قبل ‪j‬‬
‫ضمن اقصر املمرات ‪Included‬‬
‫تساوي ‪True‬‬
‫ويتم االعالن عن املصفوفة بلغة ‪ C++‬كالتالي‪:‬‬
‫;]‪bool INCLUDE[N‬‬
‫وصف خوارزمية ديجكسترا إليجاد اقصر املمرات‬
Const int N=50 ;
Typedef bool Boolean Type [N] ;
Int cost [N][N] ;
Int DISTANCE [N] ;
Int PATH [N] ;
Bool INCLUDE [N] ;
Void SHORTPATH ( int SOURCE );
Boolean Type Included;
Int I , j ;
ReadMat ();
Initialize ( SOURCE ) ;
Do
{ FINDMIN (J) ;
INCLUDE[J] = true ;
For (i=0;i<N ;i++)
If ( ! INCLUDED[J] )
UPDATE ( I, J ) ; PRINT () ;
}
While ALL( Included ) ;
PrintPath () ; }
‫الدوال املستخدمه في خوارزمية ديجكسترا‬
‫‪ .1‬الداله ‪: ReadMAT‬‬
‫حيث يتم عن طريق هذه الداله‬
‫قراءة مصفوفة اوزان الجوار‬
‫وعند ادخال مثل هذه القيم يجب ادخال القيمه‬
‫‪ 0‬في حالتين هما ‪:‬‬
‫اوال‪:‬‬
‫اذا كانت الحافه (‪ )Vi ,Vi‬أي من والى النقطة‪.‬‬
‫ثانيا‪:‬‬
‫اذا لم توجد حافة‪.‬‬
‫‪ .2‬دالة ‪: Initialize‬‬
‫حيث يتم في هذه الدالة تحديد القيم االبتدائية‬
‫]‪ INCLUDE [ SOURCE‬تحدد في البداية‬
‫على انها تساوي ‪ INCLUDE [i] true‬لكل‬
‫النقاط املتبقية تساوي ‪false‬‬
‫‪ .3‬الداله ‪: FINDMIN‬‬
‫وهي داله تعيد اقصر املمرات من نقطة البداية‬
‫الى النقطه ‪J‬‬
‫وبذلك تصبح النقطه ‪ J‬ضمن اقصر املمرات‬
‫حيث يتم تعديل قيمة ]‪Included [j‬‬
‫لتصبح مساوية للقيمة ‪true‬‬
‫ولتحديد ذلك‬
‫يتم فحص ابعاد جميع املمرات‬
‫من نقطة البداية الى نقطة ‪j‬‬
‫وهذه االبعاد تخزن في املصفـوفة‬
‫‪Distance Matrix‬‬
‫‪ .4‬الداله ‪: UPDATE‬‬
‫تستخدم لتعديل املصفوفة ‪Distance Matrix‬‬
‫واملصفوفة ‪ Path Matrix‬في حالة ايجاد نقطة مثل‬
‫‪ i‬حيث ان )‪(INCLUDE [i]= false‬‬
‫تعطي ممر طوله اقصر املمرات املوجودة‬
‫قبل اعتبار هذه النقطه‬
‫وفي هذه الحاله‬
‫تضاف هذه النقطه الى النقاط املشمولة‬
‫في اقصر املمرات‬
‫‪ .5‬الداله ‪: ALL‬‬
‫و تستخدم كداله منطقيه‬
‫و تعيد القيمه ‪ true‬عندما تصبح قيم جميع‬
‫املواقع في املصفوفة ‪Include Matrix‬‬
‫تساوي ‪true‬‬
‫وتعيد هذه الداله القيمه ‪ false‬خالف ذلك‬
‫‪ .6‬الداله ‪: SHORT PATH‬‬
‫وتستخدم كداله يتم من داخلها‬
‫استدعاء الدوال السابقه‬
‫باالضافه الى دالة الطباعه التي تقوم بطباعة‬
‫النتائج وأي معلومات اخرى نرغب فيها‬
‫وفي نهاية هذه الداله يتم طباعة اقصر املمرات‬
‫وتكلفة هذا املمر‬
‫‪.7‬‬
‫دالة الطباعه ‪: PRINT‬‬
‫تستخدم هذه الداله‬
‫لطباعة قيم املصفوف ـات‬
‫‪DISTANSE , INCLUDE , PATH‬‬
‫بعد كل خطوه من خطوات الخوارزميه‬
‫‪.8‬‬
‫الداله ‪: PRINTPATH‬‬
‫يستخدم هذا االجراء‬
‫لطباعة اقصر املمرات بين نقطة املصدر‬
‫ونقطة الوجهه املقصوده‬
‫إليجاد اقصر املمرات بين نقطتين باستخدام‬
‫خوارزمية ديجكسترا‬
‫باستخدام مصفوفة تكلفة الجوار املوضحه‬
‫في الشكل التالي‬
‫سوف نجد اقصر املمرات‬
‫من النقطه ‪ 1‬الى النقطه ‪3‬‬
1
2
3
4
5
1
0
800
2985
310
200
2
800
0
410
612
0
3
2985
410
0
1421
0
4
310
612
1421
0
400
5
200
0
0
400
0
‫توضيحات ‪:‬‬
‫‪ ‬اذا لم تكن هناك حافة من النقطه (أ)‬
‫الى النقطه(ب) فان قيمة املوقع‬
‫في الصف أ والعمود ب تساوي ما النهاية ‪.‬‬
‫‪ ‬عند بدء البرنامج فان الداله‬
‫تعمل على تحويل االصفار الناتجة عن عدم‬
‫وجود حواف بين النقاط في املخطط الى اكبر‬
‫قيمه صحيحة ممكنه في لغة ‪ C++‬ويرمز الى‬
‫هذه القيمه بالرمز ‪ MAXINT‬وهو يساوي‬
‫‪. 32767‬‬
‫‪Initialize‬‬
‫حل املثال ‪:‬‬
‫تبدأ خوارزمية ديجكسترا بقراءة قيم مصفوفة‬
‫الجوار ‪ ،‬ويتم تخزين تلك القيم في املصفوفة ‪cost‬‬
‫فعلى سبيل املثال‬
‫تساوي ]‪ cost [2,3‬القيمة ‪ 410‬وهذا يعني‬
‫ان وزن الحافه التي تصل بين النقطتين‬
‫‪ 2‬و ‪ 3‬هو ‪410‬‬
‫بعد ذلك يتم استدعاء االجراء‬
‫‪initialize‬‬
‫والذي يحدد القيم االبتدائية للمصفوفات‬
‫‪ Distance‬و ‪ Path‬و ‪Included‬‬
‫كما يلي‬
‫اوال‪:‬‬
‫محتويات املصفوفة ‪ DISTANCE‬كما يلي ‪:‬‬
‫‪ ‬بعد النقطه ‪ 1‬من نقطة البداية وهي النقطه نفسها‬
‫أي ] ‪ DISTANCE [ 1‬يساوي صفر‬
‫‪ ‬بعد النقطه ‪ 2‬من نقطة البداية‬
‫أي ] ‪ DISTANCE [ 2‬يساوي‬
‫‪800‬‬
‫‪ ‬بعد النقطه ‪ 3‬من نقطة البداية‬
‫أي ] ‪ DISTANCE [ 3‬يساوي‬
‫‪ ‬بعد النقطه ‪ 4‬من نقطة البداية‬
‫أي ] ‪ DISTANCE [ 4‬يساوي‬
‫‪ ‬بعد النقطه ‪ 5‬من نقطة البداية‬
‫أي ] ‪ DISTANCE [ 5‬يساوي‬
‫‪2985‬‬
‫‪310‬‬
‫‪200‬‬
‫وبذلك ‪:‬‬
‫تكون املصفوفة ‪ DISTANCE‬كما يلي ‪:‬‬
‫‪200‬‬
‫‪310‬‬
‫‪2985‬‬
‫‪800‬‬
‫‪Distance : 0‬‬
‫ثانيا‪:‬‬
‫محتويات املصفوفة ‪PATH‬‬
‫فهي قيمة نقطة البداية في حال وجود حافة او‬
‫ممرمن نقطة البداية الى النقاط االخرى ‪.‬‬
‫ولهذا تكون محتويات املصفوفة ‪PATH‬مساوية‬
‫للقيمة ‪(1‬أي نقطة البداية)‬
‫باستثناء ]‪ PATH[1‬حيث تساوي قيمته صفرا ‪.‬‬
‫‪1‬‬
‫‪1‬‬
‫‪1‬‬
‫‪1‬‬
‫‪0‬‬
‫‪Path:‬‬
‫ثالثا‪:‬‬
‫محتويات املصفوفة ‪INCLUDE‬‬
‫فان قيم جميع عناصرها تساوي ‪false‬‬
‫باستثناء قيمة العنصر] ‪INCLUDE [ 1‬‬
‫حيث ان القيمه ‪ 1‬تمثل نقطة البدايةوالتي‬
‫تساوي ‪true‬وهذا يعني ان النقطه ‪1‬‬
‫ينبغي ان تشمل في اقصر املمرات ‪.‬‬
‫وبذلك نحصل على القيم االبتدائية للمصفوفات‬
PATH ‫ و‬INCLUDE ‫ و‬DISTANCE
: ‫كما يلي‬
‫النقطه‬
1
2
3
4
5
Distance
Path
Include
0
0
true
800
1
false
2985
1
false
310
1
false
200
1
false
‫وفي املرحلة التالية‬
‫من تنفيذ الخوارزمية‬
‫يتم تعديل محتويات املصفوفات الثالث‬
‫بحيث تعكس تلك التعديالت ابعاد اقصر املمرات‬
‫من نقطة البداية كما تبين هذه التعديالت النقاط‬
‫التي تم اخذها بعين االعتبار والنقاط املشمولة‬
‫في اقصر املمرات‬
‫لذلك‬
‫يتم في الخطوة الثانيه من الخوارزميه إجراء‬
‫التعديالت التالية على املصفوفات الثالث‬
‫فبما ان بعد النقطه ‪ 5‬من النقطه‬
‫‪ 1‬هو االقل من ابعاد النقاط االخرى‬
‫فان النقطه ‪ 5‬ينبغي ان تكون ضمن‬
‫اقصر املمرات‬
‫وبذلك تصبح ]‪ INCLUDE [5‬مساوية للقيمة‬
‫‪ true‬وتبقى النقطه ‪ 1‬بوصفها النقطه التي يمكن‬
‫املرور بها حتى هذه اللحظه من الخوارزميه‬
‫وتبقى انطالقا من نقطة البداية (وهي النقطه‪)1‬‬
‫مباشرة الى النقاط االخرى كما تبقى محتويات‬
‫املصفوفة ‪ PATH‬كما هي‬
‫وعليه تكون محتويات املصفوفة الثالث بالنسبة‬
‫الى النقطة ‪ 5‬كما يلي ‪:‬‬
‫‪5‬‬
‫‪4‬‬
‫‪3‬‬
‫‪2‬‬
‫‪1‬‬
‫النقطه‬
‫‪0‬‬
‫‪0‬‬
‫‪true‬‬
‫‪400‬‬
‫‪5‬‬
‫‪true‬‬
‫‪1821‬‬
‫‪4‬‬
‫‪false‬‬
‫‪1000‬‬
‫‪1‬‬
‫‪false‬‬
‫‪200‬‬
‫‪5‬‬
‫‪true‬‬
‫‪Distance‬‬
‫‪Path‬‬
‫‪Include‬‬
‫نأخذ الطريق الغير مباشر من النقطة ‪ 5‬الى النقطة‬
‫‪ 3‬من خالل النقطة ‪2‬‬
‫‪5‬‬
‫‪4‬‬
‫‪3‬‬
‫‪2‬‬
‫‪1‬‬
‫النقطه‬
‫‪0‬‬
‫‪0‬‬
‫‪true‬‬
‫‪400‬‬
‫‪5‬‬
‫‪true‬‬
‫‪1410‬‬
‫‪2‬‬
‫‪false‬‬
‫‪1000‬‬
‫‪1‬‬
‫‪true‬‬
‫‪200‬‬
‫‪5‬‬
‫‪true‬‬
‫‪Distance‬‬
‫‪Path‬‬
‫‪Include‬‬
:‫فتصبح كما يلي‬
‫النقطه‬
1
2
3
4
5
Distance
200
1000
1410
400
0
Path
Include
5
true
1
true
2
true
5
true
0
true
‫التوضيح ‪:‬‬
‫لو أخذنا النقطه ‪ 2‬لتوضيح معنى القيم املوجودة‬
‫في املصفوفات الثالث‬
‫نالحظ ان محتويات املوقع الثاني في املصفوفات‬
‫الثالث هي (‪ )false , 1 , 800‬وهذا يعني ان طول‬
‫اقصر املمرات من النقطه ‪ 1‬الى النقطه ‪ 2‬حتى هذه‬
‫اللحظه هو ‪800‬‬
‫كما تعني القيمه ‪ 1‬ان النقطه التي تم استخدامها‬
‫للوصول الى النقطه ‪ 2‬هي النقطه ‪1‬‬
‫وتعني القيمه ‪ false‬ان النقطه ‪ 2‬لم تؤخذ‬
‫بعين االعتبار لتحديد اقصر املمرات‬
‫حتى هذه اللحظه‬
‫الخطوه التاليه‬
‫يمكن الوصول الى النقطه ‪3‬‬
‫إما من النقطه ‪ 1‬مباشرة وتكلفة هذا املمر ‪2985‬‬
‫او عن طريق النقطه ‪ 2‬وتكلفة هذا املمر ‪800‬‬
‫من النقطه ‪ 1‬او عن طريق النقطه ‪4‬‬
‫وتكلفة الوصول في هذه الحاله‬
‫هي ‪310‬‬
‫وبما ان ‪ 310‬اصغر من ‪800‬‬
‫لذلك شمول النقطه ‪ 4‬ضمن اقصر املمرات‬
‫وعليه تصبح قيمة‬
‫]‪DISTANCE [ 3‬‬
‫تساوي‬
‫( ‪) 1731 = 1421+310‬‬
‫كما تصبح محتويات ‪PATH [ 4 ] = 1‬‬
‫أي ان الوصول الى النقطه ‪ 3‬عن طريق النقطه‬
‫‪4‬‬
‫وبما ان ‪ PATH [ 4] = 1‬أي ان الوصول الى ‪4‬‬
‫عن طريق النقطه ‪ ( 1‬نقطة البداية )‬
‫وبما انه وتم اختيار النقطة ‪ 4‬للوصول الى النقطه ‪3‬‬
‫وتصبح محتويات العنصر الرابع للمصفوفة‬
‫‪INCLUDE‬‬
‫مساوية للقيمة‬
‫‪true‬‬
‫أي ان محتويات املصفوفات الثالث كما يلي‬
‫النقطه‬
1
2
3
4
5
Distance
0
800
1731
310
200
Path
0
1
4
1
1
Include
true
false
false
true
true
‫وبما ان بعض قيم املصفوفة ‪INCLUDE‬‬
‫غير مأخوذة بعين االعتبار‬
‫(وهو ما تشير اليه القيمه ‪)false‬‬
‫سوف يستمر تنفيذ الخوارزميه‬
‫حتى تصبح جميع فيم عناصر تلك املصفوفة‬
‫مساوية للقيمة ‪true‬‬
‫ً‬
‫إذا في الخطوه التاليه من الخوارزميه‬
‫سنالحظ أن طول املمر من ‪ 1‬الى ‪ 2‬الى ‪3‬‬
‫اصغر من طول املمر من النقطه ‪ 1‬الى ‪4‬‬
‫ونتيجة لذلك يصبح طول املسافة‬
‫من ‪ 1‬الى ‪ 3‬يساوي‬
‫‪1210 = 410+800‬‬
‫وهو اقل من الطول السابق للممر‬
‫من ‪ 1‬الى ‪ 4‬ثم الى ‪3‬‬
‫ولذلك يتم إجراء التعديالت الالزمة‬
‫على املصفوفات عن طريق اإلجراء‬
‫‪UPDATE‬‬
‫ومن ضمن تلك التعديالت‬
‫في هذه الخطوه‬
‫تعديل يغير قيمه ]‪ PATH [3‬من ‪ 4‬الى ‪2‬‬
‫وتعديل ]‪ DISTANCE[3‬من ‪1731‬الى ‪1210‬‬
‫وتعديل قيمة ]‪INCLUDE [2‬‬
‫من ‪ false‬الى ‪true‬‬
‫مما يعني ان النقطه ‪ 2‬قد اخذت بعين االعتبار‬
‫وعليه تصبح محتويات املصفوفات الثالث‬
‫‪5‬‬
‫‪4‬‬
‫‪3‬‬
‫‪2‬‬
‫‪1‬‬
‫النقطه‬
‫‪200‬‬
‫‪310‬‬
‫‪1210‬‬
‫‪800‬‬
‫‪0‬‬
‫‪Distance‬‬
‫‪1‬‬
‫‪1‬‬
‫‪2‬‬
‫‪1‬‬
‫‪0‬‬
‫‪Path‬‬
‫‪true‬‬
‫‪false‬‬
‫‪true‬‬
‫‪true‬‬
‫‪true‬‬
‫‪Include‬‬
‫ومن املصفوفة األخيرة نجد أقصر املمرات‬
‫وذلك بالنظر الى النقطه ‪ ( 3‬أي نقطة النهاية )‬
‫حيث نالحظ ان ‪PATH [ 3 ] =2‬‬
‫أي ان الوصول الى ‪ 3‬تم من ‪2‬‬
‫اما عن كيفية الوصول الى ‪2‬‬
‫فمن الواضح انه تم عبر ‪ 1‬ألن ‪PATH [ 2 ] = 1‬‬
‫وبما أن ‪ 1‬هي نقطة البداية فان اقصر املمرات‬
‫هو ‪ 1‬الى ‪ 2‬الى ‪3‬‬
‫وملعرفة طـول هذا املمر‬
‫نستخدم املصفوفة ‪DISTANCE‬‬
‫فتعطينا ] ‪ DISTANCE [ 3‬القيمه (‪)1210‬‬
‫وهي طول املمر‬
‫النقطه‬
1
2
3
4
5
Distance
0
800
1210
310
200
Path
0
1
2
1
1
Include
true
true
true
true
true
‫لتوضيح املثال‬
‫نقوم برسم املخطط ملصفوفة تكلفة الجوار‬
‫‪2985‬‬
‫‪3‬‬
‫‪410‬‬
‫‪2‬‬
‫‪1‬‬
‫‪800‬‬
‫‪1421‬‬
‫‪612‬‬
‫‪310‬‬
‫‪200‬‬
‫‪5‬‬
‫‪4‬‬
‫‪400‬‬
‫ثانيا ‪:‬‬
‫نقوم بحساب اقصر املرات بين النقطه ‪ 1‬و النقطه ‪3‬‬
‫االحتماالت ‪:‬‬
‫‪410+800‬‬
‫‪3‬‬
‫‪1‬‬
‫‪2‬‬
‫‪1‬‬
‫‪3‬‬
‫‪1‬‬
‫‪2‬‬
‫‪4‬‬
‫‪1‬‬
‫‪4‬‬
‫‪3‬‬
‫‪1‬‬
‫‪5‬‬
‫‪4‬‬
‫‪3‬‬
‫‪1‬‬
‫‪5‬‬
‫‪4‬‬
‫‪2‬‬
‫‪1‬‬
‫‪4‬‬
‫‪2‬‬
‫‪3‬‬
‫=‪1210‬‬
‫=‪2985‬‬
‫‪3‬‬
‫‪3‬‬
‫‪1421+612+800‬‬
‫=‪3233‬‬
‫‪1421+310‬‬
‫=‪1731‬‬
‫‪1421+400+200‬‬
‫=‪2021‬‬
‫‪410+612+400+200‬‬
‫=‪1622‬‬
‫‪410+612+310‬‬
‫=‪1332‬‬
‫لتوضيح املثال‬
‫وبعد حساب اوزان جميع االحتماالت‬
‫بين النقطة ‪ 1‬و النقطة ‪ 3‬يتضح ان املمر‬
‫من النقطة ‪ 1‬الى النقطة ‪ 2‬الى النقطة ‪3‬‬
‫هو أقصر املمرات مقارنة مع نتائج باقي املمرات‬
‫وهي نفس النتيجة في حل املثال بالطريقتين‬
‫‪1‬‬
‫‪2‬‬
‫‪1210 = 410 + 800 = 3‬‬
‫الطريقة الثانية ‪:‬‬
‫خوارزمية فلويد ‪Floyd‬‬
‫تعد خوارزمية فلويد تعديال على خوارزمية‬
‫‪ Dijkstra‬حيث تقوم هذه الخوارزمية على‬
‫حساب مصفوفة اقصر املمرات بين نقطتين‬
‫مختلفتين في املخطط الشبكي‬
‫من خالل مقارنة جميع قيم العمود األول‬
‫والصف االولفي مصفوفة املسافة ومقارنة‬
‫مجموع القيم املؤشر عليها مع بقية القيم االخرى‬
‫في نفس الصف والعمود في املصفوفة‬
‫اذا كان املجموع اقل من القيمة املؤشر عليها‬
‫نغير القيمة بقيمة املجموع املقابل لها في نفس‬
‫الصف والعمود كفاءة هذه الخوارزمية هو )‪O(n3‬‬
‫تحتاج هذه الخوارزمية الى ثالث مصفوفات وهي ‪:‬‬
‫‪ ‬مصفوفة تكلفة‬
‫الجوار (‪)Adjacency Matrix Cost‬‬
‫تم شرحها سابقا‪.‬‬
‫‪ ‬مصفوفة التخزين‬
‫(‪)Path Matrix‬‬
‫تحتوي هذه املصفوفة على القيم العدديه‬
‫املمر واملشمولة بأقصر املمرات ما بين‬
‫لتكلفة‬
‫نقطتين‬
‫‪ I‬و ‪ J‬ويشار الى ذلك ب ]‪PATH [I][J‬‬
‫‪ ‬مصفوفة ‪P‬‬
‫يتم تهيئة املصفوفة في بداية الخوارزمية كما يلي‬
‫اذا لم تكن ]‪ COST [I][J‬مساوية للصفر‬
‫و ]‪COST[I][J]=P[I][J‬‬
‫اذا كانت ‪ ( J=I‬أي عناصر القطر ) تساوي صفر‬
‫وفي الحاالت األخرى ‪ MAXINT‬او ما ال نهاية‬
‫ونجد من الخوارزمية وباألخص من الدوره الداخليه‬
‫انه بعد الدوره ‪ K‬نحصل على‪:‬‬
‫) ]‪P[I][J] = MINIMUM(P[I][K]+P[K][J],P[I][J‬‬
‫وهذا بدوره يضمن لنا اقصر املمرات‬
‫من النقطه ‪ I‬الى النقطه ‪J‬‬
‫دون املرور خالل أي نقطه رقمها اكبر من ‪ J‬على فرض‬
‫ان نقاط املخطط مرقمه الى ‪N-1‬‬
‫مثـال‬
‫أوجد مصفوفة أقصر املمرات للمخطط املبين في‬
‫الشكل باستخدام خوارزمية فلويد ‪Floyd‬‬
‫الحـل‬
‫أوال نجد مصفوفة تكلفة الجوار‬
‫‪ ‬املسافة املباشرة بين القمة الواحدة والقمم‬
‫االخرى‪.‬‬
‫‪ ‬إشارة ∞ تدل على عدم وجود أي طريق مباشر‪.‬‬
‫‪ ‬بما أن عدد نقاط املخطط يساوي‬
‫(‪)A,B,C,D,E‬‬
‫‪5‬‬
‫ مصفوفات‬5 ‫نحصل على‬
(P1, P2, P3, P4, P5(
A
A
B
C
D
E
∞
23 10
∞
18
B 23 ∞ 10 48 ∞
C 10 10 ∞ 19
D
∞
48 19
E 18 ∞
7
7
∞
20
20
∞
‫النتيجة للمصفوفة ‪P1‬‬
‫‪ ‬نؤشر الى العمود االول والصف االول ونقارن‬
‫بين القيم االخرى مع مجموع القيم املؤشر‬
‫عليها في نفس الصف والعمود‪.‬‬
‫‪ ‬اذا كان املجموع اقل من القيمة يجب ان نغير‬
‫القيمة بقيمة املجموع‪.‬‬
A
B
C
D
E
A
∞
23
10
∞
18
B
23
∞
10
48
∞
C
10
10
∞
19
7
D
∞
48
19
∞
20
E
18
∞
7
20
∞
‫يتم حساب القيم وتعديلها كاألتي‪:‬‬
‫∞ < ‪B+B=23+23=46 is‬‬
‫من الواضح ان القيمة اصغر من ∞ اذن نغيرها كاألتي‬
‫‪A B C D E‬‬
‫‪∞ 23 10 ∞ 18‬‬
‫∞ ‪23 46 10 48‬‬
‫‪10 10 ∞ 19 7‬‬
‫‪∞ 48 19 ∞ 20‬‬
‫∞ ‪20‬‬
‫‪7‬‬
‫∞ ‪18‬‬
‫‪A‬‬
‫‪B‬‬
‫‪C‬‬
‫‪D‬‬
‫‪E‬‬
‫نأخذ القيمة التي تليها ونقارنها‬
‫‪C+B=10+23=33 is > 10‬‬
‫ما دام املجموع ليس اقل من القيمة اذن‬
‫نتركهاكماهي‬
‫‪E‬‬
‫‪A B C D‬‬
‫‪18‬‬
‫∞ ‪A ∞ 23 10‬‬
‫‪B 23 46 10 48‬‬
‫‪C 10 10 ∞ 19‬‬
‫∞ ‪D ∞ 48 19‬‬
‫‪E 18 ∞ 7 20‬‬
‫∞‬
‫‪7‬‬
‫‪20‬‬
‫∞‬
‫النتيجة النهائية للمصفوفة ‪P1‬‬
‫مالحظة‬
‫اذا كانت احدى القيم التي نريد جمعها ومقارنتها ∞‬
‫نترك القيمة كما هي‬
‫‪∞+23‬‬
‫اذن ال يجوز‬
‫=‪D+B‬‬
‫وهكذا مع بقية القيم الى ان ننتهي من مقارنة‬
‫جميع القيم بمجموع العمود االول والصف االول‬
‫لتكون النتيجة كاآلتي‬
‫‪A B C D E‬‬
‫‪∞ 23 10 ∞ 18‬‬
‫‪23 46 10 48 41‬‬
‫‪10 10 20 19 7‬‬
‫‪∞ 48 19 ∞ 20‬‬
‫‪7 20 36‬‬
‫‪18 41‬‬
‫‪A‬‬
‫‪B‬‬
‫‪C‬‬
‫‪D‬‬
‫‪E‬‬
‫النتيجة للمصفوفة ‪P2‬‬
‫االن نأخذ التكرار التالي وننفذ الخطوات‬
‫كما في الخطوات السابقة‬
‫‪E‬‬
‫‪A B C D‬‬
‫‪18‬‬
‫∞ ‪A ∞ 23 10‬‬
‫‪B 23 46 10 48‬‬
‫‪C 10 10 20 19‬‬
‫∞ ‪D ∞ 48 19‬‬
‫‪E 18 41 7 20‬‬
‫‪41‬‬
‫‪7‬‬
‫‪20‬‬
‫‪36‬‬
‫النتيجة النهائية للمصفوفة ‪P2‬‬
‫جميع القيم عدلت كما في املصفوفة التالية اآلتي‬
‫‪A B C D E‬‬
‫‪46 23 10 71 18‬‬
‫‪23 46 10 48 41‬‬
‫‪10 10 20 19 7‬‬
‫‪71 48 19 96 20‬‬
‫‪20 36‬‬
‫‪7‬‬
‫‪18 41‬‬
‫‪A‬‬
‫‪B‬‬
‫‪C‬‬
‫‪D‬‬
‫‪E‬‬
‫النتيجة للمصفوفة ‪P3‬‬
‫التكرار التالي‬
‫‪E‬‬
‫‪D‬‬
‫‪C‬‬
‫‪B‬‬
‫‪A‬‬
‫‪46 23 10 71 18‬‬
‫‪A‬‬
‫‪23‬‬
‫‪B‬‬
‫‪10 10 20 19‬‬
‫‪C‬‬
‫‪71 48 19 96 20‬‬
‫‪D‬‬
‫‪18‬‬
‫‪E‬‬
‫‪46 10 48 41‬‬
‫‪7‬‬
‫‪20 36‬‬
‫‪7‬‬
‫‪41‬‬
‫النتيجة النهائية للمصفوفة ‪P3‬‬
‫التكرار املناسب سيكون بتغيير البنود التالية‬
‫‪E‬‬
‫‪D‬‬
‫‪C‬‬
‫‪B‬‬
‫‪A‬‬
‫‪20 20 10 29 17‬‬
‫‪20 20 10 29 17‬‬
‫‪7‬‬
‫‪10 10 20 19‬‬
‫‪29 29 19 38 20‬‬
‫‪20 14‬‬
‫‪7‬‬
‫‪17 17‬‬
‫‪A‬‬
‫‪B‬‬
‫‪C‬‬
‫‪D‬‬
‫‪E‬‬
‫النتيجة النهائية للمصفوفة ‪P4‬‬
‫التكرار التالي‪:‬في هذا التكرار ال نحتاج الى تغيير‬
‫أي بند من البنود لذلك نذهب الى التكرار الذي يليه‬
‫‪E‬‬
‫‪D‬‬
‫‪C‬‬
‫‪B‬‬
‫‪A‬‬
‫‪A 20 20 10 29 17‬‬
‫‪B 20 20 10 29 17‬‬
‫‪C 10 10 20 19 7‬‬
‫‪D 29 29 19 38 20‬‬
‫‪7 20 14‬‬
‫‪E 17 17‬‬
‫النتيجة النهائية للمصفوفة ‪P5‬‬
‫في هذه الحالة هناك مادة وحيدة نحتاج الى تغييرها كاآلتي‬
‫‪E‬‬
‫‪D‬‬
‫‪C‬‬
‫‪B‬‬
‫‪A‬‬
‫‪A 20 20 10 29 17‬‬
‫‪B 20 20 10 29 17‬‬
‫‪7‬‬
‫‪C 10 10 14 19‬‬
‫‪D 29 29 19 38 20‬‬
‫‪20 14‬‬
‫‪7‬‬
‫‪17 17‬‬
‫‪E‬‬
‫املصفوفة النهائية‬
‫اذن ‪ P5‬تكون مصفوفة أقصر املمرات على شكلهاالتالي‬
‫‪E‬‬
‫‪D‬‬
‫‪C‬‬
‫‪B‬‬
‫‪A‬‬
‫‪17‬‬
‫‪29‬‬
‫‪20 10‬‬
‫‪20‬‬
‫‪A‬‬
‫‪17‬‬
‫‪10 29‬‬
‫‪20‬‬
‫‪20‬‬
‫‪B‬‬
‫‪7‬‬
‫‪19‬‬
‫‪14‬‬
‫‪10‬‬
‫‪10‬‬
‫‪C‬‬
‫‪20‬‬
‫‪38‬‬
‫‪29 19‬‬
‫‪29‬‬
‫‪D‬‬
‫‪14‬‬
‫‪20‬‬
‫‪7‬‬
‫‪17‬‬
‫‪17‬‬
‫‪E‬‬
‫املصفوفة النهائية‬
‫يمكن استخدام املصفوفة االخيرة من اجل اعادة‬
‫رسم الشبكة االصلية فتصبح كما يلي‬