graph implementation c using adjacency list
Овај водич објашњава примену графикона у језику Ц ++. Такође ћете научити о различитим врстама, приказима и примени графикона:
Графикон је нелинеарна структура података. Графикон се може дефинисати као колекција чворова који се називају и „темена“ и „ивице“ који повезују два или више врхова.
Графикон се такође може видети као циклично стабло где врхови немају однос родитеља и детета, али одржавају сложену везу међу њима.
како изгледа мрежни безбедносни кључ
=> Кликните овде за апсолутну Ц ++ серију обуке.
Шта ћете научити:
Шта је графикон на Ц ++-у?
Као што је горе речено, граф на Ц ++ је нелинеарна структура података дефинисана као колекција врхова и ивица.
Следи пример структуре података графикона.
Горе дати пример је графикон Г. Графикон Г је скуп темена {А, Б, Ц, Д, Е} и скуп ивица {(А, Б), (Б, Ц), (А, Д), (Д, Е), (Е, Ц), (Б, Е), (Б, Д)}.
Врсте графикона - усмерени и неусмерени графикон
Графикон у коме ивице немају правце назива се неусмерени граф. Графикон приказан горе је усмерени графикон.
График у коме су ивице повезане са правцима назива се Усмерени граф.
Доље је дат пример усмереног графа.
У горе приказаном усмереном графикону ивице чине уређени пар при чему свака ивица представља одређену путању од једног до другог темена. Врх из којег иницира путања назива се „ Иницијални чвор “Док се врх у који се пут завршава назива„ Терминал Ноде ”.
Тако је у горњем графикону скуп темена {А, Б, Ц, Д, Е} а скуп ивица је {(А, Б), (А, Д), (Б, Ц), (Б, Е ), (Д, Е) (Е, Ц)}.
Разговараћемо о терминологији графа или о уобичајеним терминима који се користе у односу на графикон у наставку.
Графичка терминологија
- Вертек: Сваки чвор графикона назива се теменом. У горњем графикону, А, Б, Ц и Д су врхови графикона.
- Ивица: Веза или путања између два темена назива се ивица. Повезује два или више темена. Различите ивице на горњем графикону су АБ, БЦ, АД и ДЦ.
- Суседни чвор: У графикону, ако су два чвора повезана ивицом, тада се називају суседни чворови или суседи. У горњем графикону, врхови А и Б повезани су ивицом АБ. Тако су А и Б суседни чворови.
- Степен чвора: Број ивица које су повезане са одређеним чвором назива се степен чвора. На горњем графикону, чвор А има степен 2.
- Путања: Редослед чворова који треба да следимо када морамо да пређемо из једног врха у други у графикону назива се путања. У нашем примеру графа, ако треба да пређемо од чвора А до Ц, тада би путања била А-> Б-> Ц.
- Затворена путања: Ако је почетни чвор исти као терминални чвор, тада се тај пут назива затворени пут.
- Једноставан пут: Затворена путања у којој су сви остали чворови различити назива се једноставна путања.
- Циклус: Путања у којој нема поновљених ивица или врхова, а прва и задња темена су иста, назива се циклус. На горњем графикону А-> Б-> Ц-> Д-> А је циклус.
- Повезани граф: Повезани граф је онај у коме постоји пут између сваког темена. То значи да не постоји ниједан врх који је изолован или без везне ивице. Графикон приказан горе је повезан граф.
- Комплетан графикон: Графикон у којем је сваки чвор повезан са другим назива се комплетни граф. Ако је Н укупан број чворова у графикону, тада цео графикон садржи Н (Н-1) / 2 број ивица.
- Пондерисани графикон: Позитивна вредност додељена свакој ивици која означава њену дужину (удаљеност између врхова повезаних ивицом) назива се тежина. Графикон који садржи пондерисане ивице назива се пондерисани граф. Тежина ивице е означава се са в (е) и означава трошкове преласка ивице.
- Дијаграм: Диграф је граф у којем је свака ивица повезана са одређеним смером, а прелазак се може извршити само у одређеном смеру.
Приказ графикона
Начин на који се структура података графа чува у меморији назива се „представљање“. Графикон се може сачувати као секвенцијални приказ или као повезани приказ.
Оба ова типа су описана у наставку.
Секвенцијално представљање
У секвенцијалном приказу графова користимо матрицу суседности. Матрица суседности је матрица величине н к н где је н број темена на графикону.
Редови и колоне матрице суседности представљају врхове на графикону. Елемент матрице је постављен на 1 када је између врхова присутна ивица. Ако ивица није присутна, тада је елемент постављен на 0.
Доље је дат пример графикона који приказује његову матрицу суседности.
Видели смо матрицу суседности за горњи графикон. Имајте на уму да, будући да је ово усмерени граф, можемо рећи да је ивица присутна у оба смера. На пример, како је ивица АБ присутна, можемо закључити да је присутна и ивица БА.
У матрици суседства можемо видети интеракције темена који су елементи матрице који се постављају на 1 кад год је ивица присутна и на 0 када ивица одсуствује.
Сада да видимо матрицу суседности усмереног графа.
Као што је приказано горе, пресечни елемент у матрици суседства биће 1 ако и само ако постоји ивица усмерена из једног врха у други.
У горњем графикону имамо две ивице из темена А. Једна ивица завршава у темену Б, док друга завршава у врху Ц. Тако је у матрици суседства пресек А & Б постављен на 1 као пресек А & Ц.
Даље, видећемо секвенцијални приказ пондерисаног графа.
Доље је дат пондерисани граф и његова одговарајућа матрица суседности.
Можемо видети да се секвенцијални приказ пондерисаног графа разликује од осталих врста графова. Овде се ненула вредности у матрици суседства замењују стварном тежином ивице.
Ивица АБ има тежину = 4, па смо у матрици суседства пресек А и Б поставили на 4. Слично томе, све остале вредности које нису нула су промењене у одговарајуће тежине.
Списак суседности је лакше применити и следити. Прелазак тј. Да би се проверило да ли постоји ивица из једног врха у други потребно је О (1) време, а уклањању ивице такође је потребно О (1).
Без обзира да ли је граф оскудан (мање ивица) или густ, увек је потребно више простора.
како отворити апк датотеку у Виндовсима
Повезана репрезентација
Списак суседности користимо за повезани приказ графикона. Репрезентација листе суседности одржава сваки чвор графикона и везу до чворова који су суседни овом чвору. Када пређемо све суседне чворове, постављамо следећи показивач на нулу на крају листе.
Прво размотримо неусмерени граф и његову листу суседности.
Као што је приказано горе, имамо повезану листу (листу суседства) за сваки чвор. Из темена А имамо ивице до врхова Б, Ц и Д. Тако су ови чворови повезани са чвором А у одговарајућој листи суседства.
Затим конструишемо листу суседности за усмерени граф.
У горе усмереном графикону видимо да нема ивица пореклом из темена Е. Отуда је листа суседности за врх Е празна.
Изградимо сада листу суседности за пондерисани граф.
За пондерисани графикон у чвор листе поседовања додајемо додатно поље да означимо тежину ивице како је горе приказано.
Додавање темена на листу суседности је лакше. Такође штеди простор захваљујући примени повезане листе. Када треба да сазнамо да ли постоји ивица између једног врха до другог, операција није ефикасна.
Основне операције за графиконе
Следе основне операције које можемо извршити на структури података графикона:
- Додавање темена: Графикону додаје врх.
- Додај ивицу: Додаје ивицу између два темена графикона.
- Прикажите темена графа: Приказати темена графикона.
Имплементација Ц ++ графа коришћењем листе суседности
Сада представљамо имплементацију Ц ++ да демонстрирамо једноставан графикон користећи листу суседности.
Овде ћемо приказати листу суседности за пондерисани усмерени граф. Користили смо две структуре за задржавање листе суседности и ивица графикона. Листа суседности приказује се као (старт_вертек, енд_вертек, тежина).
Програм Ц ++ је следећи:
#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 Излаз:
Излаз:
Графикон листе суседности
(старт_вертек, енд_вертек, тежина):
(0, 2, 4) (0, 1, 2)
(1, 4, 3)
(2, 3, 2)
(3, 1, 4)
(4, 3, 3)

Примене графова
Размотримо неке од примена графикона.
- Графикони се широко користе у рачунарским наукама за приказ мрежних графикона или семантичких графикона или чак за приказ тока израчунавања.
- Графикони се широко користе у компајлерима да прикажу расподјелу ресурса процесима или да укажу на анализу тока података итд.
- Графови се такође користе за оптимизацију упита у језицима база података у неким специјализованим компајлерима.
- На веб локацијама за друштвене мреже, графикони су главне структуре које приказују мрежу људи.
- Графикони се широко користе за изградњу транспортног система, посебно путне мреже. Популарни пример су Гоогле мапе које обилато користе графиконе за означавање праваца широм света.
Закључак
Графикон је популарна и широко коришћена структура података која има мноштво примена у самом пољу рачунарских наука, осим осталих поља. Графови се састоје од врхова и ивица који повезују два или више врхова.
Графикон може бити усмерен или усмерен. Графове можемо представити помоћу матрице суседства која је линеарни приказ, као и помоћу повезане листе суседства. Такође смо разговарали о примени графа у овом упутству.
=> Погледајте овде како бисте истражили целу листу водича за Ц ++.
Препоручено читање
- Водич за напредне листе за Питхон (сортирање, преокретање, индексирање, копирање, придруживање, збир)
- Питхон листа - Креирајте, приступите, исеците, додајте или избришите елементе
- Подразумевана листа ИП адреса рутера за уобичајене брендове бежичних рутера
- 12 најбољих алата за прављење линијских графова за стварање запањујућих линијских графова (2021 РАНГИНГС)
- Подразумевана лозинка за пријаву на рутер за најбоље моделе рутера (листа 2021)
- Повезана структура података листе на Ц ++ са илустрацијом
- Структура података кружно повезане листе на Ц ++ са илустрацијом
- Структура података двоструко повезане листе у Ц ++ са илустрацијом