22// Created by barto on 19.05.18.
33//
44
5+ #include < random>
56#include " UndirectedGraph.h"
67
78using namespace std ;
@@ -19,7 +20,58 @@ std::string UndirectedGraph::getAvailableAlgorithms() {
1920}
2021
2122void UndirectedGraph::generate (int numberOfVertices, int density) {
23+ double dens = (double )density / 100 ;
24+ dens *= numberOfVertices * (numberOfVertices - 1 );
25+ dens /= 2 ;
26+ int numberOfEdges = round (dens);
2227
28+ // prepare matrix and list
29+ incidenceMatrix.clear ();
30+ adjacencyList.clear ();
31+
32+ incidenceMatrix.resize (numberOfEdges);
33+ adjacencyList.resize (numberOfVertices);
34+
35+ for (auto & row : incidenceMatrix) {
36+ row.assign (numberOfVertices, 0 );
37+ }
38+
39+ // declare rands
40+ std::random_device rd;
41+ std::mt19937 mt (rd ());
42+ std::uniform_int_distribution<int > randomVertex (0 , numberOfVertices - 1 );
43+ // std::uniform_int_distribution<int> randomEdge(0, numberOfEdges - 1);
44+ // std::uniform_int_distribution<int> randomValue(0, 15);
45+ std::uniform_int_distribution<int > randomValue (0 , INT32_MAX);
46+
47+ int beginningVertex = 0 ;
48+ int endVertex = 0 ;
49+ int value;
50+ bool edgeBeginningNotAvailable = true ;
51+ bool edgeEndNotAvailable = true ;
52+
53+ // generate rand edges
54+ for (int i = 0 ; i < numberOfEdges; i++) {
55+ // random beggining
56+ edgeBeginningNotAvailable = true ;
57+ while (edgeBeginningNotAvailable) {
58+ beginningVertex = randomVertex (mt);
59+ edgeBeginningNotAvailable = !edgeBeginningAvailable (beginningVertex);
60+ };
61+ // random end
62+ edgeEndNotAvailable = true ;
63+ while (edgeEndNotAvailable) {
64+ endVertex = randomVertex (mt);
65+ edgeEndNotAvailable = !edgeEndAvailable (beginningVertex, endVertex);
66+ };
67+
68+ value = randomValue (mt);
69+
70+ adjacencyList[beginningVertex].push_front ({endVertex, value});
71+ adjacencyList[endVertex].push_front ({beginningVertex, value});
72+ incidenceMatrix[i][beginningVertex] = value;
73+ incidenceMatrix[i][endVertex] = value;
74+ }
2375}
2476
2577void UndirectedGraph::runAlgorithm (int index, int arg1, int arg2) {
0 commit comments