Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <cstdlib> // для функций rand() и srand()
- #include <list>
- using namespace std;
- const int p = 2000000033;
- struct vertex
- {
- bool visited = false;
- vector <int> adj_list;
- };
- class Graph
- {
- vertex* vertexes;
- int* edge_value_list;
- int size;
- public:
- Graph(int n);
- int get_size();
- void addEdge(int i, int j);
- void print_graph();
- };
- Graph::Graph(int n)
- {
- vertexes = new vertex[n];
- edge_value_list = new int[n][n];
- size = n;
- }
- int Graph::get_size()
- {
- return size;
- }
- void Graph::addEdge(int i, int j)
- {
- if (i >= n || j>= n)
- cout << "Выход за пределы";
- vertexes[i].adj_list.push_back(j);
- vertexes[j].adj_list.push_back(i);
- }
- void Graph::print_graph()
- {
- cout << "\n print:" << endl;
- for (int i=0; i < size; i++)
- {
- cout << "visited = " << vertexes[i].visited << "; i= " << i << ": ";
- int size = vertexes[i].adj_list.size();
- for(int j = 0; j < size; ++j)
- {
- cout << vertexes[i].adj_list[j] << " ";
- }
- cout << endl;
- }
- }
- int rand_int(int min, int max)
- {
- static const double fraction = 1.0 / (static_cast<double>(RAND_MAX) + 1.0);
- // Равномерно распределяем рандомное число в нашем диапазоне
- return static_cast<int>(rand() * fraction * (max - min + 1) + min);
- }
- int hash(a,b,k)
- {
- return a*k+b;
- }
- int main()
- {
- srand(4541);
- int n,a,b;
- cin >> n;
- vector A(3*n); //Массив меток
- vector K(n); //Массив ключей
- for (int i = 0; i < n; ++i)
- cin >> K[i]
- bool flag = True;
- while (flag)
- {
- Graph g(n);
- a1 = rand_int(1,p-1);
- b1 = rand_int(0,p-1);
- a2 = rand_int(1,p-1);
- b2 = rand_int(0,p-1);
- for (int i = 0; i < n; ++i)
- {
- alpha_k = hash(a1,b1,K[i]);
- beta_k = hash(a2,b2,K[i]);
- g.addEdge(alpha_k,beta_k);
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment