Advertisement
Guest User

Untitled

a guest
Jan 22nd, 2020
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.15 KB | None | 0 0
  1. #include <iostream>
  2. #include <iomanip>
  3.  
  4. using namespace std;
  5.  
  6. struct slistEl
  7. {
  8.     slistEl * next;
  9.     int v;
  10. };
  11.  
  12. int n;                   // Liczba wierzcholkow
  13. slistEl ** A;            // Macierz sasiedztwa
  14. bool * visited;          // Tablica odwiedzin
  15.  
  16.                        
  17. void DFS(int v)
  18. {
  19.     slistEl * p;
  20.  
  21.     visited[v] = true;     // Zaznaczam wezel jako odwiedzony
  22.     cout << setw(3) << v;  // Przetwarzamy wezel ( wypisuje jego numer )
  23.  
  24.     for (p = A[v]; p; p = p->next)
  25.         if (!visited[p->v]) DFS(p->v);
  26. }
  27. void BFS(int v)
  28. {
  29.     slistEl *p, *q, *head, *tail; // Kolejka
  30.  
  31.     q = new slistEl;      // W kolejce umieszczam v
  32.     q->next = NULL;
  33.     q->v = v;
  34.     head = tail = q;
  35.  
  36.     visited[v] = true; // Wierzcholek v oznaczam jako odwiedzony
  37.  
  38.     while (head)
  39.     {
  40.         v = head->v;        // Odczytuje v z kolejki
  41.  
  42.         q = head;           // Usuwam z kolejki odczytane v
  43.         head = head->next;
  44.         if (!head) tail = NULL;
  45.         delete q;
  46.  
  47.         cout << setw(3) << v;
  48.  
  49.         for (p = A[v]; p; p = p->next)
  50.             if (!visited[p->v])
  51.             {
  52.                 q = new slistEl; // W kolejce umieszczam nieodwiedzonych sısiadów
  53.                 q->next = NULL;
  54.                 q->v = p->v;
  55.                 if (!tail) head = q;
  56.                 else      tail->next = q;
  57.                 tail = q;
  58.                 visited[p->v] = true; // oznaczam sasiadow jako odwiedzonych
  59.             }
  60.     }
  61. }
  62.  
  63. int main()
  64.  
  65. {
  66.     int m, i, v1, v2;
  67.     slistEl *p, *r;
  68.    
  69.     cout << "Podaj liczbe wierzcholkow i krawedzi" << endl;
  70.     cin >> n >> m;            
  71.  
  72.     A = new slistEl *[n];       // Tworze tablice list sasiedztwa
  73.     visited = new bool[n];       // Tworze tablice odwiedzin
  74.                          
  75.     for (i = 0; i < n; i++)  // Tablice wypelniam pustymi listami
  76.     {
  77.         A[i] = NULL;
  78.         visited[i] = false;
  79.     }
  80.  
  81.     for (i = 0; i < m; i++)
  82.     {
  83.         cout << "Podaj wierzcholek startowy i koncowy krawedzi" << endl;
  84.         cin >> v1 >> v2;  
  85.         p = new slistEl;    // Tworze nowy element
  86.         p->v = v2;          // Numeruje go jako v2
  87.         p->next = A[v1];    // Dodaje go na poczatek listy A [ v1 ]
  88.         A[v1] = p;
  89.     }
  90.    
  91.         //DFS(0);
  92.         BFS(0);
  93.    
  94.     for (i = 0; i < n; i++)
  95.     {
  96.         p = A[i];
  97.         while (p)
  98.         {
  99.             r = p;
  100.             p = p->next;
  101.             delete r;
  102.         }
  103.     }
  104.     delete[] A;
  105.     delete[] visited;
  106.  
  107.     cout << endl;
  108.     system("PAUSE");
  109.     return 0;
  110. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement