Advertisement
Garey

Danny_SAA5

May 13th, 2018
475
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.44 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. const int n = 6;
  6.  
  7. struct graf {
  8.     char key;
  9.     graf *next;
  10. } *gr[n];
  11.  
  12. void init(graf *gr[n]) {
  13.     for (int i = 0; i < n; i++)
  14.         gr[i] = nullptr;
  15. }
  16.  
  17. int search_node(char c, graf *gr[n]) {
  18.     int flag = 0;
  19.  
  20.     for (int i = 0; i < n; i++) {
  21.         if (gr[i]) {
  22.             if (gr[i]->key == c) {
  23.                 flag = 1;
  24.             }
  25.         }
  26.     }
  27.     return flag;
  28. }
  29.  
  30. int search_arc(graf *gr[n], char c_1, char c_2) //tyrsene na dyga (ot vryh do vryh)
  31. {
  32.     int flag = 0;
  33.     if (search_node(c_1, gr) && search_node(c_2, gr)) {
  34.         int i = 0;
  35.  
  36.         while (gr[i] == nullptr || gr[i]->key != c_1)
  37.             i++;
  38.  
  39.         graf *p = gr[i];
  40.  
  41.         while (p->key != c_2 && p->next)
  42.             p = p->next;
  43.         if (p->key == c_2)
  44.             flag = 1;
  45.     }
  46.     return flag;
  47. }
  48.  
  49. void add_node(char c, graf *gr[n]) { //dobavqne na vyzel
  50.     if (search_node(c, gr))
  51.         cout << "\nNqma takyv vyzel!!\n";
  52.     else {
  53.         int i = 0;
  54.  
  55.         while (gr[i] && i < n)
  56.             i++;
  57.  
  58.         if (gr[i] == nullptr) {
  59.             gr[i] = new graf;
  60.             gr[i]->key = c;
  61.             gr[i]->next = nullptr;
  62.         }
  63.         else
  64.             cout << "\nPrepylnen graf !!" << endl;
  65.     }
  66. }
  67.  
  68. void add_arc(char c1, char c2, graf *gr[n]) { //dobavqne na dyga
  69.     int i = 0;
  70.     graf *p;
  71.  
  72.     if (search_arc(gr, c2, c1))
  73.         cout << "\nDygata syshtestvuva !!" << endl;
  74.     else {
  75.         if (!search_node(c1, gr))
  76.             add_node(c1, gr);
  77.         if (!search_node(c2, gr))
  78.             add_node(c2, gr);
  79.         if (search_node(c1, gr) && search_node(c2, gr)) {
  80.             int i = 0;
  81.  
  82.             while (gr[i] == nullptr || gr[i]->key != c1)
  83.                 i++;
  84.  
  85.             graf *p = new graf;
  86.  
  87.             p->key = c2;
  88.             p->next = gr[i]->next;
  89.             gr[i]->next = p;
  90.         }
  91.         else
  92.             cout << "\nDygata ne e v grafa !!" << endl;
  93.     }
  94. }
  95.  
  96. void del_node(char c, graf *gr[n]) {
  97.     if (search_node(c, gr)) { //iztrivane na izhodqshtite dygi
  98.         int i = 0;
  99.  
  100.         while (gr[i] == nullptr || gr[i]->key != c)
  101.             i++;
  102.  
  103.         graf *p = gr[i];
  104.  
  105.         while (gr[i]) {
  106.             p = gr[i];
  107.             gr[i] = gr[i]->next;
  108.             delete p;
  109.         }
  110.  
  111.         for (i = 0; i < n; i++) { //iztrivane na vhodqshti dygi
  112.             graf *p = gr[i], *q = p;
  113.  
  114.             while (p->key != c && p->next) {
  115.                 q = p;
  116.                 p = p->next;
  117.             }
  118.  
  119.             if (p->key == c) {
  120.                 q->next = p->next;
  121.                 delete p;
  122.             }
  123.         }
  124.     }
  125. }
  126.  
  127. void del_arc(char c1, char c2, graf *gr[n]) {
  128.     if (search_arc(gr, c1, c2)) {
  129.         int i = 0;
  130.         while (gr[i] == nullptr || gr[i]->key != c1)
  131.             i++;
  132.  
  133.         graf *p = gr[i], *q = p;
  134.  
  135.         while (p->key != c2) {
  136.             q = p;
  137.             p = p->next;
  138.         }
  139.  
  140.         q->next = p->next;
  141.         delete p;
  142.     }
  143. }
  144.  
  145. void list_gr(graf *gr[n]) {
  146.     for (int i = 0; i < n; i++) {
  147.         if (gr[i]) {
  148.             graf *p = gr[i];
  149.             while (p) {
  150.                 cout << p->key << "\t" << endl;
  151.                 p = p->next;
  152.             }
  153.             cout << endl;
  154.         }
  155.     }
  156. }
  157.  
  158. void isolated(graf *gr[n]) {
  159.     int br[n] = { 0 };
  160.     int broqch = 0;
  161.  
  162.     for (int i = 0; i < n; i++) {
  163.         for (int j = 0; j < n; j++) {
  164.             if (gr[i] != gr[j]) {
  165.                 if (search_arc(gr, gr[i]->key, gr[j]->key) || search_arc(gr, gr[j]->key, gr[i]->key)) { // proverqva vhodqshtata dyga i izhodqshtata dyga
  166.                     br[i]++; // broi na vsichki syshtestvvashti dygi
  167.                              //cout << gr[i]->key << "->" << gr[j]->key << "dygata systhtestvyva\n";
  168.                 }
  169.             }
  170.         }
  171.         if (!br[i]) {// ako broqcha e 0
  172.             cout << gr[i]->key << "vyrhyt e izoliran" << endl;
  173.             broqch++;
  174.         }
  175.     }
  176.     cout << "\nBroi izolirani vyrhove:" << broqch << endl;
  177. }
  178.  
  179. int main() {
  180.     init(gr);
  181.  
  182.     add_arc('A', 'B', gr);
  183.     add_arc('A', 'C', gr);
  184.     add_arc('A', 'D', gr);
  185.     add_arc('C', 'D', gr);
  186.     add_node('E', gr);
  187.     add_node('F', gr);
  188.  
  189.     isolated(gr);
  190.  
  191.     return 0;
  192. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement