• Paydalanilg’an adebiyatlar
  • Texnologiyalari ha’m kommunikatsiyani rawajlandiriw ministirligi muxammed al-xorezmiy atindag’i tashkent informatsiyaliq texnologiyalari universiteti




    Download 0.88 Mb.
    bet4/4
    Sana14.12.2022
    Hajmi0.88 Mb.
    #34815
    1   2   3   4
    Bog'liq
    O\'z betinshe jumis Shukirallaev Ixlas Graflardi ańlatıw usılları
    Aahmedzhanova
    3. Graflarda kórik ótkeriw
    Grafni kórikten ótkeriw (Graph traversal) - bul berilgen túyinnen baslap barlıq túyinlerdi bir retten kórip shıǵıw ámeli bolıp tabıladı.
    Kórikten ótkeriw eki usılı ámeldegi:
    Tereńligine (tubiga) qaray qıdırıw (Depth-First Search - DFS)
    Keńligine (enine) qaray qıdırıw (Breadth-First Search - BFS)
    Bul usıllar berilgen X túyinnen baslap qandayda bir konteynerni qollaǵan halda barlıq túyinlerdi kórip shıǵadı.
    Tereńlikke qaray kóriwde stek strukturası qollanıladı.
    Keńlikke qaray kóriwde bolsa gezek strukturasınan paydalanıladı.
    Tubiga qaray kórikti otırǵızıw psevdokodi tómendegishe ámelge asıriladı
    Kirisiw: n = 4, e = 6
    2 -> 0, 0 -> 2, 1 -> 2, 0 -> 1, 3 -> 3, 1 -> 3
    Shıǵıw : tóbelikten DFS 2: 2 0 1 3
    DFS diagramması :


    Algoritm :
    Túyin hám kelilgen qatar indeksin alatuǵın rekursiv funktsiyanı jaratıń.
    Ámeldegi túyindi kelgen retinde belgileń hám túyindi baspadan shıǵarıń.
    Barlıq qońsılas hám belgilenmagan túyinlerdi aylanıp ótiń hám qońsılas túyin kórsetkishi menen rekursiv funktsiyanı shaqırıń.
    // den DFS ótkeriliwin baspadan shıǵarıw ushın C ++ programması
    // berilgen qana daǵı berilgen tóbelik
    #include
    using namespace std;
    // Grafik klassi jóneltirilgen grafikanı ańlatadı
    // qońsılas diziminen paydalanıp
    class Graph {
    int v; // Tóbelikler sanı
    // óz ishine alǵan qatarǵa kórsetkish
    // qońsılas dizimler
    list* adj;
    // DFS tárepinen qollanılatuǵın rekursiv funktsiya
    void DFSUtil (int v, bool visited[]);
    public:
    Graph (int v); // Konstruktor
    // grafikka shet qosıw funktsiyası
    void addEdge (int v, int w);
    // tóbeliklerdiń DFS ótiwi
    // v den paydalanıw múmkin
    void DFS (int v);};
    Graph::Graph (int v) {
    this->v = v;
    adj = new list[v];}
    void Graph::addEdge (int v, int w) {
    adj[v].push_back (w); }// v dıń dizimine w ni áskerg.
    void Graph::DFSUtil (int v, bool visited[]) {
    // Ámeldegi túyindi kelgen retinde belgileń hám
    // onı baspadan shıǵarıń
    visited[v] = true;
    cout << v << " ";
    // Qońsılas bolǵan barlıq tóbelikler ushın tákirarlang
    // bul tóbelikke
    list::iterator i;
    for (i = adj[v]. begin (); i! = adj[v]. end (); ++i)
    if (! visited[*i])
    DFSUtil (*i, visited);}
    // tóbeliklerdiń DFS aralıǵinda v ga erisiw múmkin.
    // Bul rekursiv DFSUtil () den paydalanadı
    void Graph::DFS (int v) {
    // Barlıq tóbeliklerdi kelilmagan dep belgileń
    bool* visited = new bool[v];
    for (int i = 0; i < v; i++)
    visited[i] = false;
    // Rekursiv járdemshi funktsiyanı shaqırıń
    // DFS-ni basıp ótiwdi baspadan shıǵarıw ushın
    DFSUtil (v, visited);}
    int main () {
    // Joqarıdaǵı diagrammada berilgen grafikanı jaratıń
    Graph g (4);
    g. addEdge (0, 1);
    g. addEdge (0, 2);
    g. addEdge (1, 2);
    g. addEdge (2, 0);
    g. addEdge (2, 3);
    g. addEdge (3, 3);
    cout << " Tómendegi birinshi traversal tereńligi"
    " (tóbelik 2 den baslap ) \n";
    g. DFS (2);
    return 0;
    }
    Nátiyje: Tómendegi birinshi traversal tereńligi (tóbelik 2 den baslap ) : 2013
    Keńlik boyınsha birinshi qıdırıw yamasa grafik ushın BFS
    Grafika ushın keńlik birinshi ótiw (yamasa qıdırıw ) terektiń birinshi keńlik boylap háreketleniwine uqsaydı ( bul xabardıń 2-usılına qarang ). Tereklerden ayrıqsha bolıp esaplanıw, grafikalar cikllerdi óz ishine alıwı múmkin, sol sebepli biz taǵı bir túyinge keliwimiz múmkin. Túyindi bir neshe ret qayta islewge jol qoymaw ushın biz logikalıq kelilgen qatardan paydalanamız. Ápiwayılıq ushın barlıq tóbeliklerge baslanǵısh tóbelikten erisiw múmkin dep shama etiledi.
    Mısalı, tómendegi qanada biz ótiwdi 2-shi tepadan baslaymız. 0 -ne shıńǵa kelip, onıń barlıq qońsılas tóbelerin izleymiz. 2 de 0 ge teń bolǵan vertex bolıp tabıladı. Eger biz kelgen tóbelerdi belgilemasak, ol halda taǵı 2 qayta isletilinip, ol tawsılmaytuǵın processga aylanadı. Tómendegi grafikdıń birinshi keńligi 2, 0, 3, 1 ge teń.

    Tómende berilgen derekten ápiwayı Breadth First Traversal programmasınıń ámelleri keltirilgen.


    // Berilgeninen BFS ótiwin baspadan shıǵarıw programması
    // derek vertex. BFS (int s) tóbeliklerdi kesip ótedi
    // lardan paydalanıw múmkin.
    #include
    #include
    using namespace std;
    // Bul klass járdeminde jóneltirilgen grafikanı ańlatadı
    // qońsılas diziminiń kórgezbesi
    class Graph{
    int v; // tóbelikler sanı
    // Jaqınlıqtı óz ishine alǵan qatarǵa kórsetkish
    // dizimler
    list *adj;
    public:
    Graph (int v); // Konstruktor
    // qanaǵa shet qosıw funktsiyası
    void addEdge (int v, int w);
    // berilgen derekten BFS ótkeriliwin baspadan shıǵaradı
    void BFS (int s);};
    Graph::Graph (int v) {
    this->v = v;
    adj = new list[v];}
    void Graph::addEdge (int v, int w) {
    adj[v].push_back (w);} // v dıń dizimine w ni áskerg.
    void Graph::BFS (int s) {
    // Barlıq tóbeliklerdi kelilmagan dep belgileń
    bool *visited = new bool[v];
    for (int i = 0; i < v; i++)
    visited[i] = false;
    // BFS ushın gezek jaratıw
    list queue;
    // Ámeldegi túyindi kelgen retinde belgileń jáne onı dizimnen ótkeriń
    visited[s] = true;
    queue.push_back (s);
    // 'i' barlıq qońsılas jaylardı alıw ushın isletiledi
    // tóbelik tóbeleri
    list::iterator i;
    while (! queue. empty ()) {
    // Tóbelikti náwbetten alın jáne onı baspadan shıǵarıń
    s = queue. front ();
    cout << s << " ";
    queue.pop_front ();
    // Dequiatsiyalangan barlıq qońsılas tóbeliklerdi alın
    // vertex s. Eger qońsılas jayǵa kelilmagan bolsa,
    // keyin kelgenligin belgileń jáne onı dizimnen ótkeriń
    for (i = adj[s]. begin (); i! = adj[s]. end (); ++i) {
    if (! visited[*i]) {
    visited[*i] = true;
    queue.push_back (*i);}}}}
    // Grafik klassi usılların sınap kóriw ushın aydawshı programması
    int main ()
    {
    // Joqarıdaǵı diagrammada berilgen grafikanı jaratıń
    Graph g (4);
    g. addEdge (0, 1);
    g. addEdge (0, 2);
    g. addEdge (1, 2);
    g. addEdge (2, 0);
    g. addEdge (2, 3);
    g. addEdge (3, 3);
    cout << " Tómendegi keńlik birinshi traversal "
    << " (tóbelik 2 den baslap ) \n";
    g. BFS (2);
    return 0;
    }

    Paydalanilg’an adebiyatlar

    1. AdamDrozdek. Data structure and algorithms in C++. Fourth edition. 2013. Chapter 8. 391-490 betlar.

    2. A computer science portal for geeks. http://www.geeksforgeeks.org/data-structures/#Graph

    3. http://www.tutorialspoint.com/data_structures_algorithms/graph_data_structure.htm

    Download 0.88 Mb.
    1   2   3   4




    Download 0.88 Mb.

    Bosh sahifa
    Aloqalar

        Bosh sahifa



    Texnologiyalari ha’m kommunikatsiyani rawajlandiriw ministirligi muxammed al-xorezmiy atindag’i tashkent informatsiyaliq texnologiyalari universiteti

    Download 0.88 Mb.