Phoenix_x

ayho_5

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