summaryrefslogtreecommitdiffstats
path: root/labb5/src/shuffle.h
diff options
context:
space:
mode:
Diffstat (limited to 'labb5/src/shuffle.h')
-rwxr-xr-xlabb5/src/shuffle.h78
1 files changed, 78 insertions, 0 deletions
diff --git a/labb5/src/shuffle.h b/labb5/src/shuffle.h
new file mode 100755
index 0000000..ebf48c2
--- /dev/null
+++ b/labb5/src/shuffle.h
@@ -0,0 +1,78 @@
+/*
+ * TDDD86 Boggle
+ * This file contains implementation of a shuffling function that operates on
+ * a 1-D and 2-D array, vector, or Grid of any type.
+ * You can use it in your program.
+ * Please do not modify this provided file.
+ */
+
+#ifndef _shuffle_h
+#define _shuffle_h
+
+#include "grid.h"
+#include "random.h"
+#include <vector>
+
+template <typename T>
+void shuffle(T* array, int length) {
+ for (int i = 0; i < length; i++) {
+ int j = randomInteger(i, length - 1);
+ if (i != j) {
+ T temp = array[i];
+ array[i] = array[j];
+ array[j] = temp;
+ }
+ }
+}
+
+template <typename T>
+void shuffle(T** array2d, int rows, int cols) {
+ int length = rows * cols;
+ for (int i = 0; i < length; i++) {
+ int j = randomInteger(i, length - 1);
+ if (i != j) {
+ int r1 = i / cols;
+ int c1 = i % cols;
+ int r2 = j / cols;
+ int c2 = j % cols;
+
+ T temp = array2d[r1][c1];
+ array2d[r1][c1] = array2d[r2][c2];
+ array2d[r2][c2] = temp;
+ }
+ }
+}
+
+template <typename T>
+void shuffle(vector<T>& v) {
+ for (int i = 0, length = v.size(); i < length; i++) {
+ int j = randomInteger(i, length - 1);
+ if (i != j) {
+ T temp = v[i];
+ v[i] = v[j];
+ v[j] = temp;
+ }
+ }
+}
+
+template <typename T>
+void shuffle(Grid<T>& grid) {
+ int rows = grid.numRows();
+ int cols = grid.numCols();
+ int length = rows * cols;
+ for (int i = 0; i < length; i++) {
+ int j = randomInteger(i, length - 1);
+ if (i != j) {
+ int r1 = i / cols;
+ int c1 = i % cols;
+ int r2 = j / cols;
+ int c2 = j % cols;
+
+ T temp = grid[r1][c1];
+ grid[r1][c1] = grid[r2][c2];
+ grid[r2][c2] = temp;
+ }
+ }
+}
+
+#endif