O’zbekiston Respublikasi Axborot Texnologiyalari va kommunikatsiyalarni rivojlantirish Vazirligi



Download 0,63 Mb.
bet2/2
Sana22.03.2021
Hajmi0,63 Mb.
#61909
1   2
Bog'liq
2-lAB

#include

using namespace std;

#define V 7

class Graph {

private:

bool** adjMatrix;

int numVertices;

public:

Graph(int numVertices) {

this->numVertices = numVertices;

adjMatrix = new bool*[numVertices];

for (int i = 0; i < numVertices; i++) {

adjMatrix[i] = new bool[numVertices];

for (int j = 0; j < numVertices; j++)

adjMatrix[i][j] = false;

}

}

void addEdge(int i, int j) {

adjMatrix[i][j] = true;

adjMatrix[j][i] = true;

}

void removeEdge(int i, int j) {

adjMatrix[i][j] = false;

adjMatrix[j][i] = false;

}

void toString() {

for (int i = 0; i < numVertices; i++) {

cout << i << " : ";

for (int j = 0; j < numVertices; j++)

cout << adjMatrix[i][j] << " ";

cout << "\n";

}

}

~Graph() {

for (int i = 0; i < numVertices; i++)

delete[] adjMatrix[i];

delete[] adjMatrix;

}

};

int minKey(int key[], bool mstSet[])

{

int min = INT_MAX, min_index;

for (int v = 0; v < V; v++)

if (mstSet[v] == false && key[v] < min)

min = key[v], min_index = v;

return min_index;

}

void printPath(int parent[], int j)

{

if (parent[j] == - 1)

return;

printPath(parent, parent[j]);

printf("%d ", j);

}

int printSolution(int dist[], int a,int b ,

int parent[])

{

int src = 0;

printf("Vertex\t Masofa \tYo'l'");

for (int i = b; i <= b; i++)

{

printf("\n%d -> %d \t\t %d\t\t ",

a, i, dist[i]);

printPath(parent, i);

}

}

void dijkstra(int graph[V][V], int src , int src1)

{

int dist[V];

bool sptSet[V];

int parent[V];

for (int i = src; i < V; i++)

{

parent[src] = -1;

dist[i] = INT_MAX;

sptSet[i] = false;

}

dist[src] = 0;

for (int count = 0; count < V - 1; count++)

{

int u = minKey(dist, sptSet);

sptSet[u] = true;

for (int v = src; v < V; v++)

if (!sptSet[v] && graph[u][v] &&

dist[u] + graph[u][v] < dist[v])

{

parent[v] = u;

dist[v] = dist[u] + graph[u][v];

}

}

printSolution(dist, src, src1, parent);

}

void printMST(int parent[], int graph[V][V])

{

cout<<"uchlari: | og'irligi\n";

for (int i = 1; i < V; i++)

cout<


}

void primMST(int graph[V][V])

{

int parent[V];

int key[V];

bool mstSet[V];

for (int i = 0; i < V; i++)

key[i] = INT_MAX, mstSet[i] = false;

key[0] = 0;

parent[0] = -1;

for (int count = 0; count < V - 1; count++)

{

int u = minKey(key, mstSet);

mstSet[u] = true;

for (int v = 0; v < V; v++)

if (graph[u][v] && mstSet[v] == false && graph[u][v] < key[v])

parent[v] = u, key[v] = graph[u][v];

}

printMST(parent, graph);

}

int main()

{ Graph g(7);

g.addEdge(0, 2);

g.addEdge(0, 3);

g.addEdge(0, 6);

g.addEdge(1, 2);

g.addEdge(1, 3);

g.addEdge(1, 4);

g.addEdge(1, 6);

g.addEdge(2, 0);

g.addEdge(2, 1);

g.addEdge(2, 5);

g.addEdge(3, 0);

g.addEdge(3, 1);

g.addEdge(3, 4);

g.addEdge(3, 5);

g.addEdge(3, 6);

g.addEdge(4, 1);

g.addEdge(4, 3);

g.addEdge(4, 5);

g.addEdge(4, 6);

g.addEdge(5, 2);

g.addEdge(5, 3);

g.addEdge(5, 4);

g.addEdge(5, 6);

g.addEdge(6, 0);

g.addEdge(6, 1);

g.addEdge(6, 3);

g.addEdge(6, 4);

g.addEdge(6, 5);

int graph[V][V] = { { 0, 0, 21, 71, 0, 0, 63 },

{ 0, 0, 9, 83, 7, 0, 70 },

{ 21, 9, 0, 0, 0, 18, 0 },

{ 71, 83, 0, 0, 57, 87, 93 },

{ 0, 7, 0, 57, 0, 6, 59 },

{ 0, 0, 18, 87, 6, 0, 66 },

{ 63, 70, 0, 93, 59, 66, 0 } };

cout<<"Berilgan graph: \n";

for (int i = 0; i

{ cout< ";

for (int j = 0; j

printf("%5d ", graph[i][j]);}

printf("\n");

}

cout<

mark:

cout<<"\n*************** Menu ****************\n";

cout<<"1. Grafning uchlari va og'irligi\n";

cout<<"2. Grafning qo'shnilik matritsasi\n";

cout<<"3. Grafning uchlari orasidagi eng qisqa masofa va uning og'irligi\n\n";

int n;

cout<<"\nMenyudan tanlang: ";

cin>>n;

system("CLS");

switch(n){

case 1: {

cout<

primMST(graph);

break;

}

case 2: {

cout<

g.toString();

break;

}

case 3: {

int a,b;

cout<<"\nOrasidagi masofani topish kerak bo'lgan uchlarni kiririting:(0-7) ";

cin>>a>>b;

dijkstra(graph, a, b);

break;

}

default: cout<<"Mavjud bo'lmagan buyruqni tanladingiz";

}

cout<<"\nBosh menyuga qaytasizmi? (ha/yoq)\n";

string q;

cin>>q;

if(q=="ha"){

goto mark;

}else{

exit;

}

return 0;

}

Natija:












Nazorat savollar:

1. Qanday grafga daraxt deyiladi?

2. 0‘rmon deb nimaga aytiladi?

3. 0‘rmon bilan daraxt bir-biridan nimasi bilan farq qiladi?

4. Daraxtning uchlari va qirralari sonlari orasida qanday bog‘lanish bor?

Daraxt va unga ekvivalent tushunchalar. Siklga ega bo‘lmagan oriyentirlanmagan bog‘lamli graf daraxt, deb ataladi1. Ta’rifga ko‘ra, daraxt sirtmoqlar va karrali qirralarga ega emas. Siklga ega bo‘lmagan oriyentirlanmagan graf о ‘rmon (asiklik graf), deb ataladi.

Beshta uchga ega bir-biriga izomorf bo‘lmagan barcha daraxtlar uchta, oltita uchga ega bunday barcha daraxtlar esa oltita ekanligini ko‘rsatish qiyin emas.

Daraxt tushunchasiga boshqacha ham ta’rif berish mumkin. Umuman olganda, G(tn,n)-graf uchun daraxtlar haqidagi asosiy teorema, deb ataluvchi quyidagi teorema o‘rinlidir.

1-teorema. Uchlari soni m va qirralari soni n bo ‘Igan G graf uchun quyidagi tasdiqlar ekvivalentdir:

1) G daraxtdir;

2) G asiklikdir va n=m—l ;

3) G bog‘lamlidir va n=m— 1;

4) G bog ‘lamlidir va undan istalgan qirrani olib tashlash amalini qo‘llash natijasida bog‘lamli bo‘Imagan graf hosil bo‘ladi, y a ’ni G ning har bir qirrasi ко ‘prikdir;

5) G grafning o ‘zaro ustma-ust tushmaydigan istalgan ikkita uchi faqat bitta oddiy zanjir bilan tutashtiriladi;

6) G asiklik bo ‘lib, uning qo ‘shni bo ‘Imagan ikki uchini qirra bilan tutashtirish amalini qo‘llash natijasida faqat bir siklga ega bo ‘Igan graf hosil bo ‘ladi.

Isboti. Teoremaning 1) tasdig‘idan uning 2) tasdig‘i kelib chiqishini isbotlaymiz. G graf daraxt bo‘lsin. Daraxtning ta’rifiga ko‘ra, u asiklik bo‘lishini ta’kidlab, m bo‘yicha matematik induksiya usuUni qo‘llaymiz.

Matematik induksiya usulining bazasi: agar m— 1 bo‘lsa, u holda G daraxt faqat bitta uchdan tashkil topgan bo‘ladi. Tabiiyki, agar bitta uchga ega bo‘lgan grafda sikl bo‘lmasa, u holda unda birorta ham qirra yo‘q, ya’ni n=0. Demak, bu holda tasdiq to‘g‘ridir.

Induksion o‘tish: G daraxt uchun k> 2 va m=k bo‘lganda, 2) tasdiq o‘rinli bo‘lsin deb faraz qilamiz. Endi uchlari soni m=k+ 1 va qirralari soni n bo‘lgan daraxtni qaraymiz. Bu daraxtning ixtiyoriy qirrasini (v,, v2) bilan belgilab, undan bu qirrani olib tashlasak, vt uchdan v2 uchgacha marshruti (aniqrog‘i, zanjiri) mavjud bo‘lmagan grafni hosil qilamiz, chunki agar hosil bo‘lgan grafda bunday zanjir bor bo‘lsa edi, u holda G daraxtda sikl topilar edi. Bunday bo‘lishi esa mumkin emas.

Hosil bo‘lgan graf ikkita Gx va G2 bog‘lamli komponentalardan iborat bo‘lib, bu komponentalaming har biri daraxtdir. Yana shuni ham e’tiborga olish kerakki, Gx va G2 daraxtlaming har biridagi uchlar soni к dan oshmaydi.

Matematik induksiya usuliga ko‘ra, bu daraxtlaming har birida qirralar soni uning uchlari sonidan bitta kam b o ‘lishini ta’kidlaymiz, ya’ni G{ graf (m, n)-graf bo‘lsa, quyidagi tengliklar o ‘rinlidir: /i=/jj+w2+ l, k + l= m l+m 1 va n=m — 1 (/=1,2). Bu tengliklardan

n=a1+n2+ l= m l—l+ m 2—1 + 1= (m,+/n2)—1 = (fc+l)—1

bo‘lishi kelib chiqadi. Demak, m=k+ 1 bo‘lganda ham n=m— I tenglik o‘rinlidir. Bu esa, matematik induksiya usuliga ko‘ra, kerakli tasdiqning isbotlanganligini anglatadi.

Minimal uzunlikka ega y o ‘l haqidagi masala. Berilgan bog‘lamli grafning har bir qirrasiga (agar berilgan graf oriyentirlangan bo‘lsa — yoyiga) qandaydir haqiqiy son mos qo‘yib, bu sonni qirraning (yoyning) uzunligi, deb ataymiz. Qirraning (yoyning) uzunligi additivlik xossasiga ega deb faraz qilamiz, ya’ni qirralar (yoylar) yordamida tuzilgan zanjiming (yo ‘Ining) uzunligi shu zanjimi (yo‘lni) tashkil etuvchi qirralar (yoylar) uzunliklari yig‘indisiga tengdir.

Tabiiyki, qirraning yoki yoyning uzunligi tushunchasi yechilayotgan masalaning mohiyatiga qarab, muayyan bir ma’noga ega bo‘lishi mumkin. Masalan, ikki shahar orasidagi masofa, qandaydir operatsiyani bajarish uchun zarur mablag‘ (xarajatlar) yoki vaqt va boshqalar. Shu nuqtayi nazardan, umuman olganda, bu yerda manfiy uzunlikka ega yoki uzunligi nolga teng qirra (yoy) ham ma’noga ega deb hisoblanadi.



. Xulosa:

Kodni Deykistra algaritimi asosida yozdim va grafning uchlari va og`irligi,qo`shnilik matritsasi,uchlari orasidagi eng qisqa masofa va uning og`irligini topdim va kerakli tushunchalarga ega bo’ldim

Download 0,63 Mb.

Do'stlaringiz bilan baham:
1   2




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

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish