-
Notifications
You must be signed in to change notification settings - Fork 1
/
Solver.h
131 lines (97 loc) · 2.53 KB
/
Solver.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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/*
* File: Solver.h
* Author: Tomáš Čerevka, Adam Činčura
*
* Created on November 2, 2011, 10:31 AM
*/
#ifndef SOLVER_H
#define SOLVER_H
#include <vector>
#include "Move.h"
#include "Board.h"
#include "SpaceItem.h"
using namespace std;
/**
* Resis zadani. Obsluhuje celou logiku algoritmu.
* @author Tomáš Čerevka
* @author Adam Činčura
*/
class Solver {
public:
/**
* Konstruktor.
* @param const Board* Deska se vstupnimi daty.
* @param int Index cilove veze.
* @param int Maximalni hloubka prohledavaneho prostoru.
*/
Solver(const Board*, int, int);
/**
* Destruktor.
*/
virtual ~Solver();
/**
* Hleda reseni nad vstupnimi daty.
* @param vector<Move>& Vektor tahu, ktere vedou k reseni. Neexistuje-li
* reseni, je vektor prazdny.
*/
void solve(vector<Move>&);
/**
* Inicializuje vnitrni promenne solveru.
*/
void init(void);
private:
/** Index cilove veze. */
int targetTower;
/** Maximalni hloubka prohledavenho prostoru. */
int maxDepth;
/** Celkovy pocet prostoru vlozeny na zasobnik. */
int pushCount;
/** Vychozi deska. */
const Board* initBoard;
/** Hloubka nejlepsiho reseni. */
int bestSolutionDepth;
/** Zasobnik prohledavanych prostoru. */
vector<SpaceItem*> space;
/** Aktualni nalezene reseni. */
vector<Move> actualSolution;
/** Dolni mez reseni. */
int lowerBound;
/**
* Zpracuje vrchol zasobniku.
* @param vector<Move>& Nejlepsi reseni.
* @param int& Aktualni hloubka.
* @return 1 = prerusit cyklus, 0 = pokracovat
*/
char proccessTop(vector<Move>&, int&);
/**
* Udela expanzi vrcholu zasobniku.
*/
void expandTop(void);
/**
* Odesle token pro distribuovane ukonceni vypoctu.
*/
void sendToken(void);
/**
* Odesle direktivni message vsem ostatnim procesum.
* @param tag odesilane zpravy
*/
void broadcast(int);
/**
* Zpracuje pripadne prichozi zpravy.
*/
void processMessages(void);
/**
* Pozada nahodny proces o poslani prace.
*/
void requestData(void);
/**
* Rozdeji svou praci mezi prichozi zadosti.
*/
void sendWork(int);
/**
* Provede prvni distribuci prace. Neceka na zadost o praci
* kazdemu procesu rovnou praci prideli.
*/
void firstDistribution(void);
};
#endif /* SOLVER_H */