Flask接口签名sign原理与实例代码浅析
441
2022-06-13
数独,很多人都玩过吧。如下图所示,在一个9x9的面板中,已经填入了一些数字。要求你将所有剩余的空格填充完整,保证每一行都是1-9,每一列也是1-9,粗线隔开的9个小九宫格里边也是1-9,每一行、每一列、每个九宫格内都不允许出现重复的数字。这也就是C语言中的回溯法。接下来就带大家了解一下如何使用C语言来进行有趣的编程之九宫格计算。
代码实现
#include
#include
using namespace std;
int* getNextSpace (int board[][9],int rowStart, int colStart)
{
if (colStart > 8) {
rowStart++;
colStart = 0;
}
if (rowStart > 8) {
return new int[] {-1};
}
for (int j = colStart; j < 9; j++) {
if (board[rowStart][j] == 0) {
return new int[] {rowStart, j};
}
}
rowStart++;
if (rowStart > 8)
{
return new int[] {-1};
}
for (int i = rowStart; i < 9; i++)
{
for (int j = 0; j < 9; j++)
{
if (board[i][j] == 0)
{
return new int[] {i, j};
}
}
}
return new int[] {-1};
}
bool validateBoard (int board[][9] ,int i,int j, int k)
{
// 纵向检查
for (int m = 0; m < 9; m++) {
if (board[m][j] == k) {
return false;
}
}
//横向检查
for (int n = 0; n < 9; n++) {
if (board[i][n] == k) {
return false;
}
}
//九宫格检查
int p = i / 3 * 3;
int q = j / 3 * 3;
for (int x = p; x < p + 3; x++)
for (int y = q; y < q + 3; y++)
{
if (board[x][y] == k) {
return false;
}
}
return true;
}
void printResult (int result[][9] )
{
for (int i = 0; i < 9; i++)
{
for (int j = 0; j < 9; j++)
{
cout << result[i][j] << "\t";
}
cout << endl;
}
}
void solveShuDu (int board[][9], int i, int j)
{
//点代表空格,寻找下一个空格
int* next = getNextSpace(board, i, j);
if (next[0] == -1) {
//找到了其中一个结果,就打印出来
printResult(board);
return;
}
int m = next[0];
int n = next[1];
//每个空格都有从1-9的取值机会
for (char k = 1; k <=9; k++) {
//验证是否符合要求
if (validateBoard(board, m, n, k)) {
board[m][n] = k;
//进入下一层递归
solveShuDu(board, m, n + 1);
//回溯时,置回空格
board[m][n] = 0;
}
}
}
int main()
{
int start = clock();
int board[][9] =
{
3,0,6,4,5,1,8,7,9,
0,4,5,7,0,9,2,0,0,
7,0,9,2,0,0,1,4,5,
0,0,3,5,4,7,6,9,0,
0,0,0,0,9,0,0,1,2,
6,0,8,0,2,3,4,0,0,
5,0,1,0,0,2,9,6,4,
8,6,4,0,0,5,7,2,3,
9,7,2,3,6,4,0,8,0
};
solveShuDu(board, 0, 0);
int end = clock();
cout <<"time:" << end - start << endl;
return 0;
}
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~