106-19-guruh talabasi Hamroyev Dilshodning algoritmni loyihalash fanidan
11-labaratoriya ishi.
Kraskal algoritmi.
Ushbu algoritm 1956 yili Kraskal tomonidan ishlab chikilgan.
Faraz qilamiz, V = {1, 2, .... n} bo’g’imlar to’plamidan iborat va Ye qirralar to’plamida aniqlangan s narx funksiyasi bilan berilgan G=(V, Ye) bog’langan graf bo’lsin. Kruskal algoritmida G graf uchun minimal narxli daraxtlar skletini qurish G grafning faqat n ta bo’g’imlaridan tashkil topgan va qirralari bo’lmagan T=(V, ø) grafdan boshlanadi. Shunday qilib, har bir bo’g’im bog’langan (o’zi-o’zi bilan) komponent hisoblanadi. Algoritm bajarilishi vaqtida bog’langan komponentlar naboriga ega bo’lamiz, asta-sekin birlashtirib daraxtlar skletini tashkillashtiramiz. Asta-sekin o’suvchi bog’langan komponentlarni qurishda Ye to’plamdan qirralar ularning narxi o’sishi tartibida navbatma-navbat tekshiriladi. Agar navbatdagi qirra turli komponentlardagi ikkita bo’g’imni birlashtirsa, u holda bu qirra T grafga qo’shiladi. Agar bu qirra bitta komponentning ikkita bo’g’imini birlashtirsa, u tashlab yuboriladi, chunki uning bog’langan komponentga qo’shilishi sikl hosil bo’lishiga olib keladi. G grafning barcha bo’g’imlari bitta komponentga tegishli bo’lsa, T minimal narxli daraxtlar skletini qurish bu graf uchun tugaydi.
Prim algoritmi.
Ushbu algoritm Robert Prim tomonidan 1957 yili ishlab chiqilgan. Ungacha 1930 yili chex matematigi Voytek Yarnik (Vojtěch Jarník) tomonidan, keiynroq 1959 yilda Edgar Deykstra (Edsger Dijkstra) tomonidan ishlab chikilgan. Minimal narxli daraxtlar skletini qurishning ikkita keng tarqalgan usuli mavjud. Ulardan biri Prim algoritmi. Bu algoritmda daraxtlar skleti «o’sadigan» ("vыrastayet") U qirralar to’plami quriladi. V={1, 2,..., n} bo’lsin. Avval U={1} bo’ladi. Algoritmning har bir qadamida minimal narxli qirra topiladi, undan keyin v qirra V\U to’plamdan U to’plamga o’tkaziladi. Bu jarayon U to’plam V to’plamga teng bo’lguncha takrorlanadi.
Dastur kodi:
#include
#include
using namespace std;
int main()
{ int M ,N, a[50],b[50],n,s=0,t=0;
cout<<"Zalning o'lchamini kiriting="<
cin>>M>>N;
cout<<"Jami gilamlar soni="<
cin>>n;
cout<<"Gilamlarning o'lchamini kiriting="<
int k=M*N;
for(int i=0;i
{
cin>>a[i]>>b[i];
s+=a[i]*b[i];
if(k>s)
{
t++;
}
else
{
break;
}
}
cout<<"Ishlatiladigan gilamlar soni="<
return 0;
}
Do'stlaringiz bilan baham: |