Ўзбекистон республикаси ахборот технологиялари ва коммуникацияларини ривожлантириш вазирлиги
Download 19.11 Kb.
|
Lab
- Bu sahifa navigatsiya:
- Labarotoriya
ЎЗБЕКИСТОН РЕСПУБЛИКАСИ АХБОРОТ ТЕХНОЛОГИЯЛАРИ ВА КОММУНИКАЦИЯЛАРИНИ РИВОЖЛАНТИРИШ ВАЗИРЛИГИ МУХАММАД АЛ-ХОРАЗМИЙ НОМИДАГИ ТОШКЕНТ АХБОРОТ ТЕХНОЛОГИЯЛАРИ УНИВЕРСИТЕТИ 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 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; j scanf("%d", &temp); a[i][j] = temp; a[j][i] = temp; } } for (int i = 0; i for (int j = 0; 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; 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; i { 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'muriyatiga murojaat qiling