13 –mavzu: Graflarda eng qisqa yo‘lni aniqlashning Deykstra algoritmlari Reja


Download 193.79 Kb.
bet6/6
Sana11.05.2023
Hajmi193.79 Kb.
#1451420
1   2   3   4   5   6
Bog'liq
13 –mavzu. Graflarda eng qisqa yo‘lni aniqlash algoritmlari. Lug

Algoritmning dastur kodi:
#include
#include
#include
#include
int main()
{
//**********************************************************
int a[500][500],d[500]={0},n,s,f,flag[500],l,min1=100000000,nmin=0;
for(inti=0;i<=500;i++) flag[i]=1;
ifstream ifs ("input.txt");
ifs>> n >> s >> f;
for(inti=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
ifs>> a[i][j];
if(a[i][j]==-1&&i!=j) a[i][j]=32000;
}
ifs.close();
//************************************************************
l=s;
for(inti=1;i<=n;i++) d[i]=a[l][i];
flag[l]=0;
for(inti=1;i<=n-1;i++)
{
min1=100000000;
nmin=l;
for(int j=1;j<=n;j++)
if(flag[j]!=0&& min1>d[j])
{
min1=d[j];
nmin=j;
}
l=nmin;
flag[l]=0;
for(int j=1;j<=n;j++)
if(flag[j]!=0)
d[j]=min(d[j],a[l][j]+d[l]);
}
ofstream ofs("output.txt");
if(d[f]==32000) ofs<<"-1";
else ofs<< d[f];
ofs.close();
return 0;
}

  1. DEYKSTRA ALGORTMALAR SO’ZINI TASNIFI

Shunday masalalarni yechish uchun Deykstra algoritmi ancha qulay va yahshi deb topilgan.


Algoritm quyidagi qadamlardan iborat:

  1. Dastlab, berilgan (Lex) uchidan qolgan barcha uchlargacha bir qirra uzunligidagi masofalar aniqlanadi.

  2. Ulardan eng qisqasi “doimiy eng qisqa masofa” sifatida belgilanadi (Lex va BVa uchlari qirrasi).

  3. Aniqlangan masofa BVa dan boshqa bor uchlargacha masofalarga qo’shiladi.

  4. Hosil bo’lgan yig’indilar dastlab aniqlangan Lex dan qolgan uchlargacha bo’lgan masofalar bilan taqqoslanadi. Natijada masofasi qisqaroq bo’lgan uchning qirrasi tanlanadi.

  5. BVa uchi, eng qisqa masofa aniqlangan uch sifatida, ruyhatdan o’chiriladi. Ruyhatga boshqa uch qo’yiladi, masalan, Roa. Bva o’z navbatida, boshqa, izlanayotgan ruyhatga qo’yiladi.

Keyingi eng qisqa masofani topish uchun butun jarayon qayta bajariladi. BVa dan keyin yana bir uch ruyhatga qo’yiladi. Dastlabkisi esa ruyhatdan o’chiriladi. Sikl Bed va Lex uchlarini bog’lash uchun belgilangan qirralar aniqlanishi bilan to’xtatiladi.
Rasm bo’yicha ikkinchi iteratsiyada Nbr uchi aniqlanadi va Roa gacha masofa 41 deb qabul qilinadi. Uchinchi iteratsiyada Gla uchigacha masofa eng qisqa va 27 deb qabul qilinadi. Quyidagi rasmda eng qisqa yo’llar daraxti ko’rinishida ularning natijaviy to’plami keltirilgan.
Aylanalar ichidagi sonlar algoritm bo’yicha qirralar tanlanish tartibini ko’rsatadilar. Bu daraxt bo’yicha biz Lex uchidan ixtiyoriy bizni qiziqtirayotgan uchgacha eng qisqa yo’lni topishimiz mumkin.
Ko’rilgan misolda Bed uchi Lex dan boshlab eng oxirgi bo’lib chiqdi, ya’ni Lex dan Bed gacha eng qisqa masofani topish uchun biz Lex dan barcha qolgan uchlargacha eng qisqa yo’llarni topishga majbur bo’ldik.
Demak, eng yomon holatda 2 ta berilgan uchlar orasidagi eng qisqa yo’lni topish, bir berilgan nuqtadan qolgan barcha nuqtalargacha eng qisqa yo’l topish masalasi bilan murakkabligi bir xil bo’ladi.


Adabiyotlar.

  1. AdamDrozdek. Data structure and algorithms in C++. Fourthedition. 2013. Chapter 8. 391-490 betlar.

  2. A computer science portal for geeks. http://www.geeksforgeeks.org/data-structures/#Graph

  3. http://www.tutorialspoint.com/data_structures_algorithms/graph_data_structure.htm

Download 193.79 Kb.

Do'stlaringiz bilan baham:
1   2   3   4   5   6




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling