-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathalgorithm.h
87 lines (60 loc) · 1.42 KB
/
algorithm.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#ifndef ALGORITHM_H_
#define ALGORITHM_H_
#include "command.h"
#include "mouse.h"
#include "maze.h"
#include <random>
#include <queue>
class Mouse;
class FloodMaze;
class Maze;
class Algorithm
{
public:
//Algorithm();
virtual const CommandI process() = 0;
virtual void init() {};
const Mouse * mouse;
virtual CommandI getCommand(int xD, int yD);
};
class RandomExplorerAlgorithm : public Algorithm
{
public:
RandomExplorerAlgorithm()
{
std::random_device rd; //Will be used to obtain a seed for the random number engine
gen = std::mt19937(rd()); //Standard mersenne_twister_engine seeded with rd()
dis = std::uniform_int_distribution<>(0, 9);
};
const CommandI process();
private:
std::uniform_int_distribution<> dis;
std::mt19937 gen;
};
struct MazeNode
{
int x, y, val;
// MazeNode * prev;
MazeNode(int _x, int _y, int _val): x(_x), y(_y), val(_val)
{
};
MazeNode(): x(0), y(0), val(0){};
};
class FloodFillExplorationAlgorithm : public Algorithm
{
public:
FloodFillExplorationAlgorithm();
const CommandI process();
void flood();
void show();
void backtrack(std::vector<MazeNode>& path);
virtual void init();
private:
Maze * maze;
std::vector<char> visited;
std::vector<int> floodVal;
int size;
int xGoal, yGoal;
void updateMazeNode(MazeNode& e, MazeNode& n, std::queue<MazeNode>& q);
};
#endif