Lines Matching refs:b

68 void print_board(const std::vector<board_element>& b) {  in print_board()  argument
71 printf(" %d", b[row * BOARD_DIM + col].solved_element); in print_board()
81 void print_potential_board(const std::vector<board_element>& b) { in print_potential_board() argument
84 if (b[row * BOARD_DIM + col].solved_element) in print_potential_board()
85 printf(" %4d ", b[row * BOARD_DIM + col].solved_element); in print_potential_board()
87 printf(" [%4d]", b[row * BOARD_DIM + col].potential_set); in print_potential_board()
97 void init_board(std::vector<board_element>& b) { in init_board() argument
99 b[i].solved_element = b[i].potential_set = 0; in init_board()
102 void init_board(std::vector<board_element>& b, unsigned short arr[BOARD_SIZE]) { in init_board() argument
104 b[i].solved_element = arr[i]; in init_board()
105 b[i].potential_set = 0; in init_board()
109 void init_potentials(std::vector<board_element>& b) { in init_potentials() argument
111 b[i].potential_set = 0; in init_potentials()
114 bool fixed_board(const std::vector<board_element>& b) { in fixed_board() argument
116 if (b[i].solved_element == 0) in fixed_board()
121 bool in_row(const std::vector<board_element>& b, unsigned row, unsigned col, unsigned short p) { in in_row() argument
123 if (c != col && b[row * BOARD_DIM + c].solved_element == p) in in_row()
128 bool in_col(const std::vector<board_element>& b, unsigned row, unsigned col, unsigned short p) { in in_col() argument
130 if (r != row && b[r * BOARD_DIM + col].solved_element == p) in in_col()
135 bool in_block(const std::vector<board_element>& b, unsigned row, unsigned col, unsigned short p) { in in_block() argument
139 if (!(i == row && j == col) && b[i * BOARD_DIM + j].solved_element == p) in in_block()
144 void calculate_potentials(std::vector<board_element>& b) { in calculate_potentials() argument
146 b[i].potential_set = 0; in calculate_potentials()
147 if (!b[i].solved_element) { // element is not yet fixed in calculate_potentials()
150 if (!in_row(b, row, col, potential) && !in_col(b, row, col, potential) && in calculate_potentials()
151 !in_block(b, row, col, potential)) in calculate_potentials()
152 b[i].potential_set |= 1 << (potential - 1); in calculate_potentials()
158 bool valid_board(const std::vector<board_element>& b) { in valid_board() argument
161 if (success && b[i].solved_element) { // element is fixed in valid_board()
163 if (in_row(b, row, col, b[i].solved_element) || in valid_board()
164 in_col(b, row, col, b[i].solved_element) || in valid_board()
165 in_block(b, row, col, b[i].solved_element)) in valid_board()
172 bool examine_potentials(std::vector<board_element>& b, bool& progress) { in examine_potentials() argument
175 if (b[i].solved_element == 0 && b[i].potential_set == 0) // empty set in examine_potentials()
177 switch (b[i].potential_set) { in examine_potentials()
179 b[i].solved_element = 1; in examine_potentials()
184 b[i].solved_element = 2; in examine_potentials()
189 b[i].solved_element = 3; in examine_potentials()
194 b[i].solved_element = 4; in examine_potentials()
199 b[i].solved_element = 5; in examine_potentials()
204 b[i].solved_element = 6; in examine_potentials()
209 b[i].solved_element = 7; in examine_potentials()
214 b[i].solved_element = 8; in examine_potentials()
219 b[i].solved_element = 9; in examine_potentials()
226 return valid_board(b); in examine_potentials()
230 std::vector<board_element>& b, in partial_solve() argument
232 if (fixed_board(b)) { in partial_solve()
236 print_board(b); in partial_solve()
240 calculate_potentials(b); in partial_solve()
242 bool success = examine_potentials(b, progress); in partial_solve()
244 partial_solve(g, b, first_potential_set); in partial_solve()
247 while (b[first_potential_set].solved_element != 0) in partial_solve()
250 if (1 << (potential - 1) & b[first_potential_set].potential_set) { in partial_solve()
251 g.run([&g, b /*make a copy of the board*/, first_potential_set, potential]() { in partial_solve()
254 auto& new_board = const_cast<std::vector<board_element>&>(b); in partial_solve()