Qo'shnilik ro'yxati yordamida C++ grafigini amalga oshirish



Download 95 Kb.
Sana14.07.2022
Hajmi95 Kb.
#798349

Qo'shnilik ro'yxati yordamida C++ grafigini amalga oshirish
Endi biz qo'shnilik ro'yxatidan foydalangan holda oddiy grafikni namoyish qilish uchun C++ dasturini taqdim etamiz.


Bu erda biz vaznli yo'naltirilgan grafik uchun qo'shnilik ro'yxatini ko'rsatamiz. Grafikning qo'shnilik ro'yxati va qirralarini ushlab turish uchun ikkita tuzilmadan foydalandik. Qo'shnilar ro'yxati (start_vertex, end_vertex, vazn) sifatida ko'rsatiladi.


C++ dasturi quyidagicha:
#include
using namespace std;
// stores adjacency list items
struct adjNode {
int val, cost;
adjNode* next;
};
// structure to store edges
struct graphEdge {
int start_ver, end_ver, weight;
};
class DiaGraph{
// insert new nodes into adjacency list from given graph
adjNode* getAdjListNode(int value, int weight, adjNode* head) {
adjNode* newNode = new adjNode;
newNode->val = value;
newNode->cost = weight;

newNode->next = head; // point new node to current head
return newNode;
}
int N; // number of nodes in the graph
public:
adjNode **head; //adjacency list as array of pointers
// Constructor
DiaGraph(graphEdge edges[], int n, int N) {
// allocate new node
head = new adjNode*[N]();
this->N = N;
// initialize head pointer for all vertices
for (int i = 0; i < N; ++i)
head[i] = nullptr;
// construct directed graph by adding edges to it
for (unsigned i = 0; i < n; i++) {
int start_ver = edges[i].start_ver;
int end_ver = edges[i].end_ver;
int weight = edges[i].weight;
// insert in the beginning
adjNode* newNode = getAdjListNode(end_ver, weight, head[start_ver]);

// point head pointer to new node
head[start_ver] = newNode;
}
}
// Destructor
~DiaGraph() {
for (int i = 0; i < N; i++)
delete[] head[i];
delete[] head;
}
};
// print all adjacent vertices of given vertex
void display_AdjList(adjNode* ptr, int i)
{
while (ptr != nullptr) {
cout << "(" << i << ", " << ptr->val
<< ", " << ptr->cost << ") ";
ptr = ptr->next;
}
cout << endl;
}
// graph implementation
int main()
{
// graph edges array.
graphEdge edges[] = {
// (x, y, w) -> edge from x to y with weight w
{0,1,2},{0,2,4},{1,4,3},{2,3,2},{3,1,4},{4,3,3}
};
int N = 6; // Number of vertices in the graph
// calculate number of edges
int n = sizeof(edges)/sizeof(edges[0]);
// construct graph
DiaGraph diagraph(edges, n, N);
// print adjacency list representation of graph
cout<<"Graph adjacency list "< for (int i = 0; i < N; i++)
{
// display adjacent vertices of vertex i
display_AdjList(diagraph.head[i], i);
}
return 0;
}
Output:


Output:


Graph adjacency list


(start_vertex, end_vertex, weight):


(0, 2, 4) (0, 1, 2)


(1, 4, 3)


(2, 3, 2)


(3, 1, 4)


(4, 3, 3)


Graph Output


Applications Of Graphs


#include
std nom maydonidan foydalanish;
// qo'shni ro'yxat elementlarini saqlaydi
struct adjNode {
int val, xarajat;
adjNode* keyingi;
};
// qirralarni saqlash uchun tuzilma
struct graphEdge {
int start_ver, end_ver, vazn;
};
sinf diagrammasi{
// berilgan grafikdagi qo'shnilar ro'yxatiga yangi tugunlarni qo'shing
adjNode* getAdjListNode(int qiymati, ichki og'irlik, adjNode* bosh) {
adjNode* newNode = yangi adjNode;
newNode->val = qiymat;
newNode->xarajat = og'irlik;
newNode->keyingi = bosh; // yangi tugunni joriy boshga yo'naltiring
yangi tugunni qaytarish;
}
int N; // grafikdagi tugunlar soni
ommaviy:
adjNode **bosh; //ko'rsatkichlar massivi sifatida qo'shnilar ro'yxati
// Konstruktor
DiaGraph(graphEdge qirralari[], int n, int N) {
// yangi tugunni ajrating
head = new adjNode*[N]();
bu->N = N;
// barcha uchlar uchun bosh ko'rsatgichni ishga tushiring
uchun (int i = 0; i < N; ++i)
head[i] = nullptr;
// yo'naltirilgan grafikni unga qirralar qo'shish orqali qurish
uchun (imzosiz i = 0; i < n; i++) {
int start_ver = edges[i].start_ver;
int end_ver = edges[i].end_ver;
int vazni = qirralar [i].og'irlik;
// boshiga kiriting
adjNode* newNode = getAdjListNode(oxirgi_veri, vazn, bosh[start_ver]);

// bosh ko'rsatkichni yangi tugunga yo'naltirish
head[start_ver] = newNode;
}
/ Destruktor
~DiaGraph() {
uchun (int i = 0; i < N; i++)
oʻchirish[] bosh[i];
o'chirish[] bosh;
}
};
// berilgan cho'qqining barcha qo'shni cho'qqilarini chop eting
void display_AdjList(adjNode* ptr, int i)
{
while (ptr != nullptr) {
cout << "(" << i << ", " << ptr->val
<< ", " << ptr->narxi << ") ";
ptr = ptr->keyingi;
}
cout << endl;
}
// grafikni amalga oshirish
int main()
{
// grafik qirralari massivi.
graphEdge qirralari[] = {
// (x, y, w) -> og'irligi w bilan x dan y gacha bo'lgan chekka
{0,1,2},{0,2,4},{1,4,3},{2,3,2},{3,1,4},{4,3,3}
};
int N = 6; // Grafikdagi cho'qqilar soni
// qirralarning sonini hisoblash
int n = sizeof(qirralar)/sizeof(qirralar[0]);
// grafik qurish
Diagramma diagrammasi (qirralar, n, N);
// grafikning qo'shnilik ro'yxati tasvirini chop etish
cout<<"Grafik qo'shnilik ro'yxati "< uchun (int i = 0; i < N; i++)
{
// i cho'qqisining qo'shni cho'qqilarini ko'rsatish
display_AdjList(diagraph.head[i], i);
}
qaytish 0;
Chiqish:


Chiqish:


Grafik qo'shnilar ro'yxati


(start_vertex, end_vertex, vazn


Grafik ilovalari
Keling, grafiklarning ba'zi qo'llanilishini ko'rib chiqaylik.


Grafiklar kompyuter fanida tarmoq grafiklarini yoki semantik grafiklarni tasvirlash yoki hatto hisoblash oqimini tasvirlash uchun keng qo'llaniladi.
Grafiklar kompilyatorlarda jarayonlarga resurslarni taqsimlashni tasvirlash yoki ma'lumotlar oqimini tahlil qilish va hokazolarni ko'rsatish uchun keng qo'llaniladi.
Ba'zi maxsus kompilyatorlarda ma'lumotlar bazasi tillarida so'rovlarni optimallashtirish uchun grafiklardan ham foydalaniladi.
Ijtimoiy tarmoq saytlarida grafiklar odamlar tarmog'ini tasvirlash uchun asosiy tuzilmalar hisoblanadi.
Grafiklar transport tizimini, ayniqsa yo'l tarmog'ini qurishda keng qo'llaniladi. Mashhur misol - butun dunyo bo'ylab yo'nalishlarni ko'rsatish uchun grafiklardan keng foydalanadigan Google xaritalari.
Xulosa
Grafik mashhur va keng qo'llaniladigan ma'lumotlar tuzilmasi bo'lib, u boshqa sohalardan tashqari informatika sohasida ko'plab ilovalarga ega. Grafiklar ikki yoki undan ortiq cho'qqilarni bog'laydigan cho'qqi va qirralardan iborat.


Grafik yo'naltirilgan yoki yo'naltirilmagan bo'lishi mumkin. Grafiklarni chiziqli ko'rinish bo'lgan qo'shnilik matritsasi, shuningdek, qo'shnilik bilan bog'langan ro'yxat yordamida tasvirlashimiz mumkin. Ushbu qo'llanmada biz grafikni amalga oshirishni ham muhokama qildik.

Download 95 Kb.

Do'stlaringiz bilan baham:




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©www.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