本文整理汇总了C++中Sudoku::applyMove方法的典型用法代码示例。如果您正苦于以下问题:C++ Sudoku::applyMove方法的具体用法?C++ Sudoku::applyMove怎么用?C++ Sudoku::applyMove使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Sudoku
的用法示例。
在下文中一共展示了Sudoku::applyMove方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: assert
vector<PuzzleState*> Sudoku::getSuccessors() {
assert(!isSolution()); // some move remains!
vector<PuzzleState*> result;
// find a blank square to fill in
int row = 0;
int col = 0;
for (int i=0; i<9; i++) {
for (int j=0; j<9; j++) {
if (grid[i][j]==0) {
row = i;
col = j;
// terminate the loop
// no labelled breaks :(
i = 9;
j = 9;
}
}
}
for (int digit=1; digit<=9; digit++) {
if (rowTally[row][digit]) continue; // digit already used in row
if (colTally[col][digit]) continue; // digit already used in column
if (zoneTally[row/3][col/3][digit]) continue; // digit already used in zone
// This is a legal digit! Add it to possible moves.
Sudoku *temp = new Sudoku(*this);
temp->applyMove(row,col,digit);
result.push_back(temp);
}
return result;
}
示例2: solve
bool Sudoku::solve()
{
if(fin()){
return true;
}
while(1){
Move m = findMove();
if(m.val == 0){
//no more moves
return false;
}
Sudoku scopy = *this;
bool result = scopy.applyMove(m);
if(!result){
cand[m.ii][m.jj][m.val] = false;
continue;
}
result = scopy.solve();
if(result){
*this = scopy;
return true;
}else{
cand[m.ii][m.jj][m.val] = false;
}
}
return false;
}