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

مطلوب حل مسألة تعتمد على خوارزمية ديكسترا باستعمال ++C

بدأه haidora_25 في 28 نوفمبر 2009 · 3 رد · 1,924 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم و رحمة الله و بركاته

أضحى مبارك للجميع.

أرجو حل المسألة الثالثة الموجودة في هذا الرابط :

Click Here - 0.66MB

, فهي تعتمد على خوارزمية ديكسترا و أنا فهمت الخوارزمية و لكن لم أعرف كيف أطبقها بلغة ++C

و إن قام أحد الإخوة بشرح حله خطوة خطوة فسأكون له من الشاكرين و تكتب في ميزان حسناته إن شاء الله.

و شكراً

تم تعديل هذه المشاركة بواسطة haidora_25 في 28 نوفمبر 2009 في 20:09

#2

السلام عليكم

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

http://vinodcse.word...gorithm-in-c-2/

الكود كان يوجد به بعض الأخطاء

وهذا تصحيح له

#include<iostream.h>
class dijkstra
{
private:
 int graph[15][15];
 int set[15],predecessor[15],mark[15],pathestimate[15];
 int source;
 int num_of_vertices;
public:
 int minimum();
 void read();
 void initialize();
 void printpath(int);
 void algorithm();
 void output();
};
void dijkstra::read()
{
 cout<<"enter the number of vertices\n";
 cin>>num_of_vertices;
 while(num_of_vertices<=0)

{
 cout<<"\nthis is meaningless,enter the number carefully\n";

cin>>num_of_vertices;

}
 cout<<"enter the adjacent matrix:\n";
 for(int i=1;i<=num_of_vertices;i++)
 {
 cout<<"\nenter the weights for the row\n"<<i;
 for(int j=1;j<=num_of_vertices;j++)
 {
 cin>>graph[j];
 while(graph[j]<0)
 {
	cout<<"\nu should enter the positive valued weights only\nenter the value again\n";
	cin>>graph[j];
 }
 }
 }
cout<<"\nenter the source vertex\n";
cin>>source;
}

void dijkstra::initialize()
{
	for(int i=1;i<=num_of_vertices;i++)
	{
		mark=0;
		pathestimate=999;
		predecessor=0;
	}
}
void dijkstra::algorithm()
{
	initialize();
	int count=0;
	int i;
	int u;
	while(count<num_of_vertices)
	{
		u=minimum();
		set[++count]=u;
		mark=1;
		for(i=1;i<=num_of_vertices;i++)
		{
			if(graph>0)
			{
				if(mark!=1)
				{
					if(pathestimate>pathestimate+graph)
					{
						pathestimate=pathestimate+graph;
						predecessor=u;
					}
				}
			}
		}
	}

}

void dijkstra::printpath(int i)
{
	cout<<endl;
	if(i==source)
	{
		cout<<source;
	}
	else if(predecessor==0)
		cout<<"no path from "<<source<<" to "<<i;
	else
	{
		printpath(predecessor);
		cout<<".."<<i;
	}
}
void dijkstra::output()
{
	for(int i=1;i<=num_of_vertices;i++)
	{
		printpath(i);
		if(pathestimate!=999)
			cout<<"->("<<pathestimate<<")\n";
	}
	cout<<endl;
}
int dijkstra::minimum()
{
	int min=999;
	int i,t;
	for(i=1;i<=num_of_vertices;i++)
	{
		if(mark!=1)
		{
			if(min>=pathestimate)
			{
				min=pathestimate;
				t=i;
			}
		}
	}
	return t;
}
void main()
{
	dijkstra s;
	s.read();
	s.algorithm();
	s.output();
}

تم تعديل هذه المشاركة بواسطة amin_mu123 في 28 نوفمبر 2009 في 20:47

اللهم صل على سيدنا محمد وعلى آله وصحبه وسلم

#3

كثر الله خيرك و جزاك جزاءً حسناً و أسكنك الفردوس الأعلى.

يا ريت لو يتفضل أحد الإخوة بشرح الأمور الغامضة في الكود السابق

#4

جزاكم الله الجنة

your code easy and readable

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

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

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

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

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