Phoenix_x

Untitled

Apr 30th, 2018
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.33 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include <iostream>
  3. #include <string>
  4.  
  5. using namespace std;
  6.  
  7. struct tree {
  8.     int key;
  9.     tree* left;
  10.     tree* right;
  11. } *root = NULL;
  12.  
  13. const int n = 10;//максимум брой елементи в граф
  14. int maxBrojIzhodVrazki = 0;
  15.  
  16.  
  17. struct link //spisak ot grafa
  18. {
  19.     int key;
  20.     link *next;
  21. }
  22. *gr[n]; //масив от указатели
  23.  
  24. void inti_graph(link *gr[n]);
  25. int search_node_graph(link *gr[n], char c);
  26. int search_arc_graph(link *gr[n], char c1, char c2);
  27. void add_node_graph(link *gr[n], char c);
  28. void add_arc_graph(link *gr[n], char c1, char c2);
  29. void obhozdane_graph(link *gr[n]);
  30.  
  31. void main()
  32. {
  33.     inti_graph(gr);
  34.  
  35.     char elem_1 = 'a';
  36.     char elem_2 = 'a';
  37.  
  38.     cout << "Vavedete vrazka mezdu dva elementa: " << endl;
  39.     cout << "Element 1: ";
  40.     cin >> elem_1;
  41.     cout << "Element 2: ";
  42.     cin >> elem_2;
  43.  
  44.     add_arc_graph(gr, elem_1, elem_2);
  45.  
  46.     string answear = "";
  47.     while (true)
  48.     {
  49.         cout << "Zelaete li da vavedete oshte vrazki (z - ne): ";
  50.         cin >> answear;
  51.  
  52.         if (answear == "z")
  53.         {
  54.             break;
  55.         }
  56.         else
  57.         {
  58.             cout << "Element 1: ";
  59.             cin >> elem_1;
  60.             cout << "Element 2: ";
  61.             cin >> elem_2;
  62.             add_arc_graph(gr, elem_1, elem_2);
  63.         }
  64.     }
  65.  
  66.     obhozdane_graph(gr);
  67.     cout << "Rang na grafa: " << maxBrojIzhodVrazki << endl;
  68. }
  69.  
  70.  
  71. // Инициализация
  72. void inti_graph(link *gr[n])
  73. {
  74.     for (int i = 0; i < n; i++)
  75.         gr[i] = NULL;
  76. }
  77.  
  78. //Търсене на връх
  79. int search_node_graph(link *gr[n], int c)
  80. {
  81.     int flag = 0;
  82.  
  83.     for (int i = 0; i < n; i++)
  84.     {
  85.         if (gr[i])
  86.         {
  87.             if (gr[i]->key == c)
  88.                 flag = 1;
  89.         }
  90.     }
  91.     return flag;
  92. }
  93.  
  94. //Търсене на дъга
  95. int search_arc_graph(link *gr[n], char c1, char c2)
  96. {
  97.     int flag = 0;
  98.  
  99.     if (search_node_graph(gr, c1) && search_node_graph(gr, c2))
  100.     {
  101.         int i = 0;
  102.  
  103.         while (gr[i]->key != c1)
  104.             i++;
  105.  
  106.         link *p = gr[i];
  107.  
  108.         while (p->key != c2 && p->next != NULL)
  109.             p = p->next;
  110.  
  111.         if (p->key == c2)
  112.             flag = 1;
  113.     }
  114.  
  115.     return flag;
  116. }
  117.  
  118. //Добавяне на връх
  119. void add_node_graph(link *gr[n], char c)
  120. {
  121.     if (search_node_graph(gr, c))
  122.         cout << "Sashtestvuva vruh s tazi stojnost" << endl;
  123.     else
  124.     {
  125.         int i = 0;
  126.         while (gr[i] && i < n)
  127.             i++;
  128.  
  129.         if (gr[i] == NULL)
  130.         {
  131.             gr[i] = new link();
  132.             gr[i]->key = c;
  133.             gr[i]->next = NULL;
  134.         }
  135.         else
  136.             cout << "Prepalvane na strukturata" << endl;
  137.     }
  138. }
  139.  
  140. //добавяне на дъга
  141. void add_arc_graph(link *gr[n], char c1, char c2)
  142. {
  143.     if (search_arc_graph(gr, c1, c2))
  144.         cout << "Dagata veche sashtestvuca";
  145.     else
  146.     {
  147.         if (!search_node_graph(gr, c1))
  148.             add_node_graph(gr, c1);
  149.         if (!search_node_graph(gr, c2))
  150.             add_node_graph(gr, c2);
  151.  
  152.         int i = 0;
  153.         while (gr[i]->key != c1)
  154.             i++;
  155.  
  156.         link *p = new link;
  157.         p->key = c2;
  158.         p->next = gr[i]->next;
  159.         gr[i]->next = p;
  160.     }
  161. }
  162.  
  163. void obhozdane_graph(link *gr[n])
  164. {
  165.     for (int i = 0; i < n; i++)
  166.     {
  167.         if (gr[i])
  168.         {
  169.             link *p = gr[i];
  170.            
  171.             int brojIzhodVrazki = -1;
  172.  
  173.             while (p)
  174.             {
  175.                 p = p->next;
  176.                 brojIzhodVrazki++;
  177.             }
  178.  
  179.             if (brojIzhodVrazki > maxBrojIzhodVrazki) {
  180.                 maxBrojIzhodVrazki = brojIzhodVrazki;
  181.             }
  182.  
  183.             brojIzhodVrazki = 0;
  184.         }
  185.     }
  186. }
  187.  
  188. int search_node_graph(link *gr[n], char c)
  189. {
  190.     int flag = 0;
  191.  
  192.     for (int i = 0; i < n; i++)
  193.     {
  194.         if (gr[i])
  195.         {
  196.             if (gr[i]->key == c)
  197.                 flag = 1;
  198.         }
  199.     }
  200.     return flag;
  201. }
Advertisement
Add Comment
Please, Sign In to add comment