本文整理汇总了C++中Sudoku::dimension方法的典型用法代码示例。如果您正苦于以下问题:C++ Sudoku::dimension方法的具体用法?C++ Sudoku::dimension怎么用?C++ Sudoku::dimension使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Sudoku
的用法示例。
在下文中一共展示了Sudoku::dimension方法的8个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: next
constexpr Cell next(const Sudoku& s)
{
for(size_t i=0; i<s.dimension(); ++i)
for(size_t j=0; j<s.dimension(); ++j)
if (s(i,j) == 0) return {i,j};
return {std::numeric_limits<Cell::first_type>::max(),std::numeric_limits<Cell::second_type>::max()};
}
示例2: finished
constexpr bool finished(const Sudoku& s)
{
for(size_t i=0; i<s.dimension(); ++i)
for(size_t j=0; j<s.dimension(); ++j)
if (s(i,j) == 0) return false;
return true;
}
示例3: colValid
constexpr bool colValid(const Sudoku& s, size_t col, size_t pos = 0)
{
if (pos > s.dimension()) return true;
else if (s(pos,col) == 0) return colValid(s,col,pos+1);
else {
for(size_t i=pos+1;i<s.dimension();++i)
if (s(i,col) == s(pos,col)) return false;
return colValid(s,col,pos+1);
}
}
示例4: rowValid
constexpr bool rowValid(const Sudoku& s, size_t row, size_t pos = 0)
{
if (pos > s.dimension()) return true;
else if (s(row,pos) == 0) return rowValid(s,row,pos+1);
else {
for(size_t i=pos+1;i<s.dimension();++i)
if (s(row,i) == s(row,pos)) return false;
return rowValid(s,row,pos+1);
}
}
示例5: quadrantValid
constexpr bool quadrantValid(const Sudoku& s, size_t x, size_t y, size_t pos = 0)
{
if (pos > s.dimension()) return true;
else if (qVal(s, x,y,pos) == 0) return quadrantValid(s, x, y, pos+1);
else {
for(size_t i=pos+1;i<s.dimension();++i)
if (qVal(s, x,y,i) == qVal(s, x,y,pos)) return false;
return quadrantValid(s,x,y,pos+1);
}
}
示例6: valid
constexpr bool valid(const Sudoku& s)
{
for(size_t x=0;x<s.dimension();++x) {
if (!rowValid(s,x)) return false;
if (!colValid(s,x)) return false;
}
size_t qsize = sqrt(s.dimension());
for(size_t i=0; i<qsize; ++i)
for(size_t j=0; j<qsize; ++j)
if (!quadrantValid(s,i,j)) return false;
return true;
}
示例7: solve
constexpr Sudoku solve(const Sudoku& s)
{
if (!valid(s)) return s;
else {
const Cell n{next(s)};
if (n.first == std::numeric_limits<Cell::first_type>::max()) return s;
for(unsigned i=1;i<=s.dimension();++i) {
const auto ns = s.replace(n.first,n.second,i);
const Sudoku res = solve(ns);
if (finished(res) && valid(res)) return res;
}
return s;
}
}
示例8: qVal
// return the value at offset in quadrant(x,y)
constexpr unsigned qVal(const Sudoku& s, size_t x,size_t y, size_t offset = 0)
{
size_t qsize = sqrt(s.dimension());
return s(qsize*x + offset/qsize, qsize*y + offset % qsize);
}