Ўзбекистон республикаси ахборот технологиялари ва коммуникацияларини ривожлантириш вазирлиги


Download 19.11 Kb.
Sana20.10.2020
Hajmi19.11 Kb.
#135066
Bog'liq
Lab


ЎЗБЕКИСТОН РЕСПУБЛИКАСИ АХБОРОТ ТЕХНОЛОГИЯЛАРИ ВА КОММУНИКАЦИЯЛАРИНИ РИВОЖЛАНТИРИШ ВАЗИРЛИГИ

МУХАММАД АЛ-ХОРАЗМИЙ НОМИДАГИ ТОШКЕНТ АХБОРОТ ТЕХНОЛОГИЯЛАРИ УНИВЕРСИТЕТИ

Labarotoriya

Algoritimlarni Loyihalash

Bajardi: Toshev Islombek

Gruh: 218-18



Deykstra algoritmi

Eng qisqa masofani aniqlash misolini ko’rib chiqaylik. Shahar viloyatlarini birlashtiruvchi avtomobil yo’llari tarmog’I berilgan bo’lsin. Ba’zi yo’llar bir tomonlama. Shahar markazidan har bir viloyatga eng qisqa yo’lni topishimiz zarur.

Keltirilgan masalani yechishda Deykstraning algoritmidan foydalanishimiz mumkin. Algoritm graflarga asoslangan bo’lib, u 1959 yil niderlandiyalik olim E. Deykstra tomonidan yaratilgan. U grafning bitta uchidan boshqa uchlarigacha eng qisqa masofani aniqlaydi, bunda grafning quvurg’alari manfiy og’irlikka ega bo’lmasligi lozim. Bizdan birinchi uchdan qolganlariga borishning qisqa masofasini toppish talab qilinsin.

Doiralar shaklida uchlar, chiziqlar shaklida ular orasidagi yo’l (grafning qovurg’alari) tasvirlangan. Doiralar ichida uchlarning nomerlari, qovurg’alar ostida ularning og’irligi – yo’l uzunligi berilgan. Har bir uchning yonida qizil belgi bilan shu uchga birinchi uchdan eng qisqa masofa uzunligi belgilangan.



#define _CRT_SECURE_NO_WARNINGS
#include
#include
#define SIZE 6
int main()
{
int a[SIZE][SIZE];
int d[SIZE];
int v[SIZE];
int temp, minindex, min;
int begin_index = 0;
system(
"chcp 1251");
system(
"cls");

for (int i = 0; i{
a[i][i] =
0;
for (int j = i + 1; jprintf("Введите расстояние %d - %d: ", i + 1, j + 1);
scanf(
"%d", &temp);
a[i][j] = temp;
a[j][i] = temp;
}
}

for (int i = 0; i{
for (int j = 0; jprintf("%5d ", a[i][j]);
printf(
"\n");
}

for (int i = 0; i{
d[i] =
10000;
v[i] =
1;
}
d[begin_index] =
0;

do {
minindex =
10000;
min =
10000;
for (int i = 0; i{
if ((v[i] == 1) && (d[i]{
min = d[i];
minindex = i;
}
}

if (minindex != 10000)
{
for (int i = 0; i{
if (a[minindex][i] > 0)
{
temp = min + a[minindex][i];
if (temp < d[i])
{
d[i] = temp;
}
}
}
v[minindex] =
0;
}
}
while (minindex < 10000);

printf("\nКратчайшие расстояния до вершин: \n");


for (int i = 0; iprintf("%5d ", d[i]);


int ver[SIZE];
int end = 4;
ver[
0] = end + 1;
int k = 1;
int weight = d[end];

while (end != begin_index)
{
for (int i = 0; iif (a[i][end] != 0)
{
int temp = weight - a[i][end];
if (temp == d[i])
{
weight = temp;
end = i;
ver[k] = i +
1;
k++;
}
}
}

printf("\nВывод кратчайшего пути\n");


for (int i = k - 1; i >= 0; i--)
printf(
"%3d ", ver[i]);
getchar(); getchar();
return 0;
}

Download 19.11 Kb.

Do'stlaringiz bilan baham:




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