Advertisement
Guest User

graph

a guest
Jan 24th, 2020
183
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.85 KB | None | 0 0
  1. #include<iostream>
  2. using namespace std;
  3. //GRAPH DOMASHNO
  4. const int n=15;
  5. struct link
  6. {
  7.  char key;
  8.  link *next;
  9. }
  10. *gr[n];
  11. void init(link *gr[n]);
  12. int search_node (link*gr[n],char c);
  13. int search_arc(link *gr[n],char c1,char c2);
  14. void add_node (link *gr[n],char c);
  15. void add_arc(link *gr[n],char c1,char c2);
  16. void del_node(link *gr[n],char c);
  17. void del_arc (link *gr[n],char c1,char c2);
  18. void list_node (link *gr[n]);
  19. void main()
  20. {
  21.  char c,k;
  22.  int m;
  23.  do
  24.  {
  25.   cout<<"Menu\n";
  26.   cout<<"1.Init\n";
  27.      cout<<"2.Add node\n";
  28.      cout<<"3.Add arc\n";
  29.   cout<<"4.Del node\n";
  30.   cout<<"5.Del arc\n";
  31.   cout<<"6.Search node\n";
  32.   cout<<"7.Search arc\n";
  33.   cout<<"8.Print All\n";
  34.   cout<<"9.Exit\n";
  35.   cin>>m;
  36.   switch(m)
  37.   {
  38.    case 1:
  39.     init (gr);
  40.     break;
  41.    case 2:
  42.     cout<<"Enter node: ";
  43.      cin>>c;
  44.      add_node(gr,c);
  45.     break;
  46.    case 3:
  47.     cout<<"Enter first node: ";
  48.      cin>>c;
  49.     cout<<"Enter second node: ";
  50.     cin>>k;
  51.     add_arc(gr,c,k);
  52.     break;
  53.    case 4:
  54.     cout<<"Enter node: ";
  55.     cin>>c;
  56.     del_node (gr,c);
  57.     break;
  58.    case 5:
  59.        cout<<"Enter first node: ";
  60.     cin>>c;
  61.     cout<<"Enter second node: ";
  62.     cin>>k;
  63.     del_arc (gr,c,k);
  64.     break;
  65.    case 6:
  66.     cout<<"Enter node: ";
  67.     cin>>k;
  68.     if (search_node (gr,k))
  69.     cout<<"Search result : OK \n";
  70.     else
  71.      cout<<"Search result: NO \n";
  72.     break;
  73.    case 7:
  74.     cout<<"Enter first node: ";
  75.     cin>>c;
  76.     cout<<"Enter second node: ";
  77.     cin>>k;
  78.     if (search_arc(gr,c,k))
  79.      cout<<"Search result : OK\n";
  80.     else
  81.      cout<<"Search result : NO\n";
  82.     break;
  83.    case 8:
  84.     list_node(gr);
  85.   }
  86.  }
  87.  while (m!=9);
  88.  cout<<endl;
  89.  system ("pause");
  90. }
  91. int search_node(link *gr[n],char c)
  92. {
  93.  int flag=0;
  94.  for (int i=0;i<n;i++)
  95.   if (gr[i])
  96.    if(gr[i]->key==c)
  97.     flag=1;
  98.  return flag;
  99. }
  100. int search_arc(link *gr[n],char c1,char c2)
  101. {
  102.  int flag=0;
  103.  if (search_node(gr,c1) && search_node(gr,c2))
  104.  {
  105.   int i=0;
  106.   while (gr[i]->key!=c1)
  107.    i++;
  108.   link *p=gr[i];
  109.   while(p->key!=c2 && p->next !=NULL)
  110.    p=p->next;
  111.   if(p->key==c2)
  112.    flag=1;
  113.  }
  114. return flag;
  115. }
  116. void add_node (link *gr[n],char c)
  117. {
  118.  if (search_node(gr,c))
  119.   cout<<"\n Existing node \n";
  120.  else
  121.  {
  122.   int j=0;
  123.   while (gr[j] && j<n)
  124.    j++;
  125.   if (gr[j]==NULL)
  126.   {
  127.    gr[j]=new link;
  128.    gr[j]->key=c;
  129.    gr[j]->next=NULL;
  130.   }
  131.   else
  132.    cout<<"\n Overflow \n";
  133.  }
  134. }
  135. void add_arc(link *gr[n],char c1,char c2)
  136. {
  137.  if (search_arc(gr,c1,c2))
  138.   cout<<"\n Existing arc \n";
  139.  else
  140.  {
  141.   if(!search_node(gr,c1))
  142.    add_node(gr,c1);
  143.   if (!search_node(gr,c2))
  144.    add_node (gr,c2);
  145.    int i=0;
  146.   link *p;
  147.   while (gr[i]->key!=c1)
  148.    i++;
  149.   p=new link;p->key=c2;
  150.   p->next=gr[i]->next;gr[i]->next=p;
  151.  }
  152. }
  153.   void list_node(link *gr[n])
  154.   {
  155.    for (int i=0;i<n;i++)
  156.     if (gr[i])
  157.      cout<<gr[i]->key;
  158.    cout<<endl;
  159.   }
  160.   void init (link *gr[n])
  161.   {
  162.    for (int i=0;i<n;i++)
  163.     gr[i]=NULL;
  164.   }
  165.   void del_node(link *gr[n],char c)
  166.   {
  167.    if (search_node (gr,c))
  168.    {
  169.    int i=0; link *p=NULL, *q=NULL;
  170.    while (gr[i]->key!=c)
  171.     i++;
  172.    while (gr[i] !=NULL)
  173.    {
  174.     p=gr[i];
  175.     gr[i]=gr[i]->next;
  176.     delete p;
  177.    }
  178.    for (i=0;i<n;i++)
  179.     if (gr[i])
  180.     {
  181.      p=gr[i];
  182.      while (p->key!=c && p->next!=NULL)
  183.      {
  184.       q=p;
  185.       p=p->next;
  186.      }
  187.      if (p->key==c)
  188.      {
  189.       q->next=p->next;
  190.       delete p;
  191.      }
  192.     }
  193.    }
  194.    else
  195.     cout<<"The mode is not in the graph";
  196.    cout<<endl;
  197.    }
  198.     void del_arc(link *gr[n],char c1,char c2)
  199.     {
  200.      int i=0; link *p=NULL, *q=NULL;
  201.      if (search_arc (gr,c1,c2))
  202.      {
  203.       while (gr[i]->key!=c1)
  204.        i++;
  205.       p=gr[i];
  206.       while (p->key!=c2)
  207.       {
  208.        q=p;p=p->next;
  209.       }
  210.       q->next=p->next;
  211.       delete p;
  212.      }
  213.      else
  214.       cout<<"The arc is not in the graph" ;
  215.      cout<<endl;
  216.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement