Skip to content
This repository was archived by the owner on May 27, 2019. It is now read-only.

Commit 3080077

Browse files
committed
Add method for generating undirected graphs
1 parent 7147bdd commit 3080077

1 file changed

Lines changed: 52 additions & 0 deletions

File tree

UndirectedGraph.cpp

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// Created by barto on 19.05.18.
33
//
44

5+
#include <random>
56
#include "UndirectedGraph.h"
67

78
using namespace std;
@@ -19,7 +20,58 @@ std::string UndirectedGraph::getAvailableAlgorithms() {
1920
}
2021

2122
void 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

2577
void UndirectedGraph::runAlgorithm(int index, int arg1, int arg2) {

0 commit comments

Comments
 (0)