Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <iomanip>
- #include <vector>
- #include <string.h>
- #include <string>
- #include <assert.h>
- using namespace std;
- struct node {
- int data;
- vector<node> nodes;
- node(int d, vector<int>newNeighbours)
- {
- data = d;
- for (size_t i = 0; i < newNeighbours.size(); i++)
- {
- nodes.push_back(newNeighbours[i]);
- }
- }
- node(int d)
- {
- data = d;
- }
- };
- class graph {
- private:
- vector<node> vertices;
- int numberOfVertices;
- public:
- bool empty()
- {
- if (vertices.empty())
- {
- return true;
- }
- else
- return false;
- }
- void addVertice(int newData)
- {
- 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
- //moje vmesto tova za da ne go pravim tova da e vector<node*> vertices;
- }
- node getVertex(int number)
- {
- return vertices[number];
- }
- void addEdge(int data1, int data2)
- {
- int indexOfFirst;
- int indexOfSecond;
- for (size_t i = 0; i <vertices.size(); i++)
- {
- if (vertices[i].data == data1)
- {
- indexOfFirst = i;
- break;
- }
- }
- for (size_t i = 0; i <vertices.size(); i++)
- {
- if (vertices[i].data == data2)
- {
- indexOfSecond = i;
- break;
- }
- }
- vertices[indexOfFirst].nodes.push_back(data2);
- vertices[indexOfSecond].nodes.push_back(data1);
- }
- bool areNeighbours(int dataOfFirstvertex, int dataOfSecondVertex)//dataOfFirstvertex e index
- {
- int indexOfFirst,indexOfSecond;
- for (size_t i = 0; i < vertices.size(); i++)
- {
- if (vertices[i].data == dataOfFirstvertex)
- {
- indexOfFirst = i;
- break;
- }
- }
- for (size_t i = 0; i < vertices[indexOfFirst].nodes.size(); i++)
- {
- if (vertices[indexOfFirst].nodes[i].data == dataOfSecondVertex)
- {
- return true;
- }
- }
- return false;
- }
- bool path(int data1, int data2)//data-ta i index-a sa ednakvi
- {
- int indexOfFirst, indexOfSecond;
- if (areNeighbours(data1, data2))
- {
- return true;
- }
- for (size_t i = 0; i < vertices.size(); i++)
- {
- if (vertices[i].data == data1)
- {
- indexOfFirst = i;
- break;
- }
- }
- for (size_t i = 0; i < vertices[indexOfFirst].nodes.size(); i++)
- {
- if (vertices[indexOfFirst].nodes[i].data == data2)
- {
- return true;
- break;
- }
- path(vertices[indexOfFirst].nodes[i].data, data2);
- }
- return false;
- }
- };
- int main()
- {
- graph graph1;
- graph1.addVertice(1);
- graph1.addVertice(2);
- graph1.addVertice(3);
- graph1.addEdge(1, 2);
- graph1.addEdge(2, 3);
- cout << graph1.areNeighbours(1, 2);
- cout<<path
- return 0;
- }
- zad2
- #include <iostream>
- #include <iomanip>
- #include <vector>
- #include <string.h>
- #include <string>
- #include <assert.h>
- using namespace std;
- class graph {
- private:
- vector< vector<int> > vertices;//index and data are the same thing
- public:
- graph()
- {
- }
- bool empty()
- {
- if (vertices.empty())
- {
- return true;
- }
- else
- return false;
- }
- void addVertex()
- {
- vector<int> v;
- vertices.push_back(v);//dobavqme prazen vector
- }
- void addNeighbours(int addData, int index)//na koi vuzel dobavqme nighbours
- {
- //vector<int> neighbours;
- //neighbours.push_back(newData);
- vertices[index].push_back(addData);//orientiran
- if (addData > vertices.size())
- {
- addVertex();
- }
- vertices[addData].push_back(index);
- }
- void addEdge(int data1, int data2)
- {
- vertices[data1].push_back(data2);
- vertices[data2].push_back(data1);
- }
- };
- int main()
- {
- graph graph1;
- for (size_t i = 0; i < 5; i++)
- {
- graph1.addVertex();
- }
- graph1.addNeighbours(2, 1);
- graph1.addNeighbours(5, 1);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement