-
Notifications
You must be signed in to change notification settings - Fork 0
/
scacchiera.h
159 lines (141 loc) · 3.93 KB
/
scacchiera.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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
#ifndef SCACCHIERA_H
#define SCACCHIERA_H
#include <ostream>
#include <istream>
#include "celle.h"
#include "costanti.h"
using namespace geometria;
const int Z = 9;
/**
* Classe Scacchiera
* Contiene tutte le informazioni relative alla scacchiera
*/
class Scacchiera : public Celle
{
private:
void print(std::ostream &os) const;
void printverbose(std::ostream &os) const;
protected:
void quadratoxy2xy(int zx,int zy, int &x1, int &x2, int &y1, int &y2);
void quadratoz2xy(int z, int &x1, int &x2, int &y1, int &y2);
bool corretta_linea(int y);
bool corretta_colonna(int x);
bool corretto_quadrato(int z);
bool corretto_quadrato(int zx, int zy);
bool corretto_rettangolo(int x1, int x2, int y1, int y2);
bool same_units(int x1, int y1, int x2, int y2);
bool same_linea(int x1, int y1, int x2, int y2);
bool same_colonna(int x1, int y1, int x2, int y2);
bool same_quadrato(int x1, int y1, int x2, int y2);
friend std::ostream& operator<<(std::ostream& os, const Scacchiera& s);
friend std::istream& operator>>(std::istream& is, Scacchiera& s);
int xy2z(int x,int y);
public:
/**
* Costruttore.
* Azzera tutte le celle, quindi le setta tutte come non determinate
* e pone tutti i candidati per ogni cella possili
*/
Scacchiera();
/**
* Costruttore copia
*/
Scacchiera(const Scacchiera &old);
/**
* Costruttore.
* Inizializza la scacchiera ad una situazione definita dall'array init
*/
Scacchiera(int init[X][Y]);
/**
* Costruttore.
* Inizializza la schacchiera ad una situazione definita dalla stringa init
* Gli spazi vuoti possono essere rappresentati con 0, . o spazio
*/
Scacchiera(const char init[]);
/**
* Restituisce il numero di celle orizzontali
*/
int width();
/**
* Restituisce il numero di celle verticali
*/
int heigth();
/**
* Restituisce il puntatore alla cella di coordinate x,y
*/
Cella* celle(int x, int y);
const Cella* celle(int x, int y) const;
/**
* Ricarica la situazione a quella definita dall'array init
*/
void ricarica(int init[X][Y]);
/**
* Ricarica la situazione a quella definita dalla stringa init
*/
void ricarica(const char init[]);
/**
* Restituisce il valore della cella x,y, zero se non e' determinata
*/
int valore(int x,int y) const;
/**
* Setta il valore n alla cella x,y
*/
void valore(int x,int y, int n);
/**
* Restituisce quante celle sono state inserite
*/
int inseriti();
/**
* Restituisce quante celle sono vuote
*/
int mancanti();
/**
* Restituisce se sono state riempite tutte le celle
*/
bool completato();
/**
* Resistituisce se il sudoku e' corretto (anche se non risolto)
*/
bool corretto();
/**
* Resistuisce se il sudoku e' finito correttamente
*/
bool finito();
/**
* Restituisce la stringa che descrive il sudoku, gli spazi vuoti sono
* rappresentati con 0
*/
char *stringa();
/**
* Traspone la schacchiera come una matrice
*/
void trasponi();
/**
* Riflette destra e sinistra
*/
void riflettix();
/**
* Riflette sopra e sotto
*/
void riflettiy();
/**
* Azzera tutte le celle
*/
void azzera();
void LaTeX(char* file);
const char* LaTeX();
int quadratoxy2z(int x, int y);
bool operator==(const Scacchiera&) const;
bool operator!=(const Scacchiera&) const;
/**
* Operatore <.
* A < B quando:
* - B ha piu' celle determinate
* - le celle determinate di A sono uguali a quelle di B
*/
bool operator<(const Scacchiera&) const;
bool operator<=(const Scacchiera&) const;
};
std::ostream& operator<<(std::ostream& os, const Scacchiera& s);
std::istream& operator>>(std::istream& is, Scacchiera& s);
#endif