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
|
#include <iostream>
typedef char board_type[9][9];
bool verify_block(board_type board, unsigned blockID)
{
unsigned digits[9] = { 0 } ;
const unsigned rowBegin = (blockID / 3) * 3 ;
const unsigned colBegin = (blockID % 3) * 3 ;
for ( unsigned i=0; i<3; ++i )
for ( unsigned j=0; j<3; ++j )
if ( digits[board[rowBegin+i][colBegin+j]-1]++ )
return false ;
return true ;
}
bool subsq_verify(board_type board)
{
bool verified = true ;
for ( unsigned i=0; i<9; ++i )
if ( !verify_block(board, i) )
{
std::cout << "Sub-square " << i+1 << " is not correct.\n" ;
verified = false ;
}
return verified ;
}
int main()
{
board_type correctBoard =
{
{8,3,5,4,1,6,9,2,7},
{2,9,6,8,5,7,4,3,1},
{4,1,7,2,9,3,6,5,8},
{5,6,9,1,3,4,7,8,2},
{1,2,3,6,7,8,5,4,9},
{7,4,8,5,2,9,1,6,3},
{6,5,2,7,8,1,3,9,4},
{9,8,1,3,4,5,2,7,6},
{3,7,4,9,6,2,8,1,5}
} ;
board_type incorrectBoard =
{
{8,3,5,4,1,6,9,2,7},
{2,9,6,8,5,7,4,3,1},
{4,1,7,2,9,3,6,5,8},
{5,6,9,1,3,4,7,2,2},
{1,2,3,6,7,8,5,4,9},
{7,4,8,5,2,9,1,6,3},
{6,5,2,7,8,1,3,9,4},
{9,8,1,3,4,5,2,7,6},
{3,7,4,9,6,2,8,1,5}
} ;
std::cout << "correctBoard:\n" ;
if ( subsq_verify(correctBoard) )
std::cout << "\tverified correct.\n" ;
std::cout << "incorrectBoard:\n" ;
if ( subsq_verify(incorrectBoard) )
std::cout << "\tverified correct.\n" ;
}
|