Skip to content

Commit 1e96c29

Browse files
committed
Add fill methods in C++ Array1D/Array2D/Graph Randomizers
1 parent 5568937 commit 1e96c29

File tree

4 files changed

+42
-29
lines changed

4 files changed

+42
-29
lines changed

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,13 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
66

77
## [Unreleased]
88

9+
## [2.0.6]
10+
### Added
11+
- Add fill methods in C++ Array1D/Array2D/Graph Randomizers.
12+
13+
### Changed
14+
- Improve catching time limit exceeded.
15+
916
## [2.0.5]
1017
### Changed
1118
- Build tracers from skeletons.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@algorithm-visualizer/tracer-generator",
3-
"version": "2.0.5",
3+
"version": "2.0.6",
44
"description": "Visualization Libraries for Algorithm Visualizer",
55
"scripts": {
66
"build": "node ./node_modules/webpack/bin/webpack --bail --progress --config webpack.config.js && chmod +x ./bin/*"

src/languages/cpp/builder/skeleton/include/Randomize.h

Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ namespace Randomize {
8585

8686

8787
template<class T>
88-
class Array2D : public Randomizer<T **> {
88+
class Array2D : public Randomizer<void> {
8989
private:
9090
int _N;
9191
int _M;
@@ -105,22 +105,23 @@ namespace Randomize {
105105
return *this;
106106
}
107107

108-
T **create() {
109-
T **D = new T *[_N];
108+
void create() {
109+
throw std::invalid_argument("Call 'void fill(T *D)' instead.");
110+
}
111+
112+
void fill(T *D) {
110113
for (int i = 0; i < _N; i++) {
111-
D[i] = new T[_M];
112114
for (int j = 0; j < _M; j++) {
113-
D[i][j] = (*_randomizer).create();
115+
D[i * _M + j] = (*_randomizer).create();
114116
}
115-
if (_sorted) std::sort(D[i], D[i] + _M);
117+
if (_sorted) std::sort(&D[i * _M], &D[i * _M] + _M);
116118
}
117-
return D;
118119
}
119120
};
120121

121122

122123
template<class T>
123-
class Array1D : public Randomizer<T *> {
124+
class Array1D : public Randomizer<void> {
124125
private:
125126
int _N;
126127
Randomizer<T> *_randomizer;
@@ -138,20 +139,21 @@ namespace Randomize {
138139
return *this;
139140
}
140141

141-
// TODO: fix array1d/2d/graph randomizers returning pointer instead of array
142-
T *create() {
143-
T *D = new T[_N];
142+
void create() {
143+
throw std::invalid_argument("Call 'void fill(T *D)' instead.");
144+
}
145+
146+
void fill(T *D) {
144147
for (int i = 0; i < _N; i++) {
145148
D[i] = (*_randomizer).create();
146149
}
147150
if (_sorted) std::sort(D, D + _N);
148-
return D;
149151
}
150152
};
151153

152154

153155
template<class T>
154-
class Graph : public Randomizer<T **> {
156+
class Graph : public Randomizer<void> {
155157
private:
156158
int _N;
157159
double _ratio;
@@ -178,24 +180,23 @@ namespace Randomize {
178180
return *this;
179181
}
180182

181-
T **create() {
182-
T **G = new T *[_N];
183-
for (int i = 0; i < _N; i++) {
184-
G[i] = new T[_N];
185-
}
183+
void create() {
184+
throw std::invalid_argument("Call 'void fill(T *G)' instead.");
185+
}
186+
187+
void fill(T *G) {
186188
Double ratioRandomizer;
187189
for (int i = 0; i < _N; i++) {
188190
for (int j = 0; j < _N; j++) {
189191
if (i == j) {
190-
G[i][j] = 0;
192+
G[i * _N + j] = 0;
191193
} else if (_directed || i < j) {
192-
G[i][j] = ratioRandomizer.create() < _ratio ? _weighted ? (*_randomizer).create() : 1 : 0;
194+
G[i * _N + j] = ratioRandomizer.create() < _ratio ? _weighted ? (*_randomizer).create() : 1 : 0;
193195
} else {
194-
G[i][j] = G[j][i];
196+
G[i * _N + j] = G[j * _N + i];
195197
}
196198
}
197199
}
198-
return G;
199200
}
200201
};
201202
}
Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,22 @@
11
#include <string>
22
#include <iostream>
3-
#include "LogTracer.h"
43
#include "GraphTracer.h"
54
#include "Randomize.h"
65

6+
#define N 5
7+
78
using namespace std;
8-
using namespace Randomize;
99

1010
int main() {
11-
int N = 5;
12-
int **graph = Graph<int>(N, .5, *(new Integer(1, 5))).weighted(true).directed(false).create();
11+
int array[N][N];
12+
Randomize::Graph<int>(N, 1, *(new Randomize::Integer(1, 9))).weighted().directed(false).fill(&array[0][0]);
1313
GraphTracer graphTracer;
14-
int arr[][2] = {{0, 1}, {1, 0}};
15-
graphTracer.set(arr);
14+
graphTracer.set(array);
15+
for (int i = 0; i < N; i++) {
16+
for (int j = 0; j < N; j++) {
17+
cout << array[i][j] << " ";
18+
}
19+
cout << endl;
20+
}
1621
return 0;
1722
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy