Advertisement
ElenaR1

graph

Dec 7th, 2016
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.68 KB | None | 0 0
  1. #include <iostream>
  2. #include <iomanip>
  3. #include <vector>
  4. #include <string.h>
  5. #include <string>
  6. #include <assert.h>
  7. using namespace std;
  8.  
  9. struct node {
  10.     int data;
  11.     vector<node> nodes;
  12.  
  13.     node(int d, vector<int>newNeighbours)
  14.     {
  15.         data = d;
  16.         for (size_t i = 0; i < newNeighbours.size(); i++)
  17.         {
  18.             nodes.push_back(newNeighbours[i]);
  19.         }
  20.     }
  21.     node(int d)
  22.     {
  23.         data = d;
  24.     }
  25. };
  26.  
  27. class graph {
  28. private:
  29.     vector<node> vertices;
  30.     int numberOfVertices;
  31. public:
  32.     bool empty()
  33.     {
  34.         if (vertices.empty())
  35.         {
  36.             return true;
  37.         }
  38.         else
  39.             return false;
  40.     }
  41.     void addVertice(int newData)
  42.     {
  43.         vertices.push_back(*(new node(newData)));//dereferirame. T.k new node e ukazatel, a nashiq masiv se sustoi ot obekti s opshte edna * mahame ukazatelq
  44.                                                  //moje vmesto tova za da ne go pravim tova da e vector<node*> vertices;
  45.     }
  46.     node getVertex(int number)
  47.     {
  48.         return vertices[number];
  49.     }
  50.     void addEdge(int data1, int data2)
  51.     {
  52.         int indexOfFirst;
  53.         int indexOfSecond;
  54.         for (size_t i = 0; i <vertices.size(); i++)
  55.         {
  56.             if (vertices[i].data == data1)
  57.             {
  58.                  indexOfFirst = i;
  59.                 break;
  60.             }
  61.         }
  62.         for (size_t i = 0; i <vertices.size(); i++)
  63.         {
  64.             if (vertices[i].data == data2)
  65.             {
  66.                  indexOfSecond = i;
  67.                 break;
  68.             }
  69.         }
  70.         vertices[indexOfFirst].nodes.push_back(data2);
  71.         vertices[indexOfSecond].nodes.push_back(data1);
  72.     }
  73.    
  74.     bool areNeighbours(int dataOfFirstvertex, int dataOfSecondVertex)//dataOfFirstvertex e index
  75.     {
  76.         int indexOfFirst,indexOfSecond;
  77.         for (size_t i = 0; i < vertices.size(); i++)
  78.         {
  79.             if (vertices[i].data == dataOfFirstvertex)
  80.             {
  81.                 indexOfFirst = i;
  82.                 break;
  83.             }
  84.         }
  85.        
  86.         for (size_t i = 0; i < vertices[indexOfFirst].nodes.size(); i++)
  87.         {
  88.             if (vertices[indexOfFirst].nodes[i].data == dataOfSecondVertex)
  89.             {
  90.                 return true;
  91.             }
  92.         }
  93.         return false;
  94.  
  95.     }
  96.     bool path(int data1, int data2)//data-ta i index-a sa ednakvi
  97.     {
  98.         int indexOfFirst, indexOfSecond;
  99.         if (areNeighbours(data1, data2))
  100.         {
  101.             return true;
  102.         }
  103.         for (size_t i = 0; i < vertices.size(); i++)
  104.         {
  105.             if (vertices[i].data == data1)
  106.             {
  107.                 indexOfFirst = i;
  108.                 break;
  109.             }
  110.         }
  111.  
  112.         for (size_t i = 0; i < vertices[indexOfFirst].nodes.size(); i++)
  113.         {
  114.             if (vertices[indexOfFirst].nodes[i].data == data2)
  115.             {
  116.                 return true;
  117.                 break;
  118.             }
  119.             path(vertices[indexOfFirst].nodes[i].data, data2);
  120.         }
  121.         return false;
  122.     }
  123. };
  124.  
  125.  
  126.  
  127. int main()
  128. {
  129.     graph graph1;
  130.     graph1.addVertice(1);
  131.     graph1.addVertice(2);
  132.     graph1.addVertice(3);
  133.     graph1.addEdge(1, 2);
  134.     graph1.addEdge(2, 3);
  135.     cout << graph1.areNeighbours(1, 2);
  136.     cout<<path
  137.  
  138.     return 0;
  139. }
  140.  
  141. zad2
  142. #include <iostream>
  143. #include <iomanip>
  144. #include <vector>
  145. #include <string.h>
  146. #include <string>
  147. #include <assert.h>
  148. using namespace std;
  149.  
  150.  
  151.  
  152. class graph {
  153. private:
  154.     vector< vector<int> > vertices;//index and data are the same thing
  155. public:
  156.     graph()
  157.     {
  158.        
  159.     }
  160.     bool empty()
  161.     {
  162.         if (vertices.empty())
  163.         {
  164.             return true;
  165.         }
  166.         else
  167.             return false;
  168.     }
  169.     void addVertex()
  170.     {
  171.         vector<int> v;
  172.         vertices.push_back(v);//dobavqme prazen vector
  173.     }
  174.     void addNeighbours(int addData, int index)//na koi vuzel dobavqme nighbours
  175.     {
  176.         //vector<int> neighbours;
  177.         //neighbours.push_back(newData);
  178.         vertices[index].push_back(addData);//orientiran
  179.         if (addData > vertices.size())
  180.         {
  181.             addVertex();
  182.         }
  183.         vertices[addData].push_back(index);
  184.    
  185.     }
  186.     void addEdge(int data1, int data2)
  187.     {
  188.         vertices[data1].push_back(data2);
  189.         vertices[data2].push_back(data1);
  190.     }
  191.    
  192. };
  193.  
  194.  
  195.  
  196. int main()
  197. {
  198.     graph graph1;
  199.     for (size_t i = 0; i < 5; i++)
  200.     {
  201.         graph1.addVertex();
  202.     }
  203.    
  204.     graph1.addNeighbours(2, 1);
  205.     graph1.addNeighbours(5, 1);
  206.    
  207.  
  208.     return 0;
  209. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement