当前位置:网站首页>Solve 9 with C language × 9 Sudoku (personal test available) (thinking analysis)
Solve 9 with C language × 9 Sudoku (personal test available) (thinking analysis)
2022-07-06 02:38:00 【Fish ball】
use C Linguistic solution 9×9 Sudoku ( Close test available )( Thought analysis )
Sudoku , I believe we are all familiar , Just like this. :
#include <stdio.h>
#include <stdbool.h>
#include <windows.h>
#pragma warning(disable:4996);
// Read the incomplete Sudoku matrix
void readMatrix(int array[9][9])
{
int row, // That's ok
col; // Column
for (row = 0; row < 9; row++)
{
for (col = 0; col < 9; col++)
scanf(" %1d", &array[row][col]); /**** Be careful %1d And there are spaces in front of ****/
getchar();
}
}
// Determine whether there are duplicate numbers on rows and columns ( Return without repetition true, Repeat return false)
bool RowAndColRepeat(int array[9][9], int row, int col, int num)
{
int i; // Count
// Determine whether there are duplicate numbers on the line
for (i = 0; i < 9; i++)
if (array[row][i] == num)
return false;
// Determine whether there are duplicate numbers on the column
for (i = 0; i < 9; i++)
if (array[i][col] == num)
return false;
return true;
}
// Determine the position Which is it? 3x3 squared paper for practicing calligraphy
int getRowOrCol(int num)
{
if (num < 3)
return 0;
else if (num < 6)
return 3;
else
return 6;
}
// Judge 3x3 Is there a duplicate number in the Jiugong grid ( Return without repetition true, Repeat return false)
bool BlockRepeat(int array[9][9], int row, int col, int num)
{
int getRowOrCol(int num); // obtain 3x3 The function prototype declaration of the starting position of the Jiugong lattice
int rowStart, // Line number
colStart, // Column number
i, j; // Count
rowStart = getRowOrCol(row);
colStart = getRowOrCol(col);
for (i = rowStart; i < rowStart + 3; i++)
for (j = colStart; j < colStart + 3; j++)
if (array[i][j] == num)
return false;
return true;
}
// Deep search of Sudoku
void calculation(int array[9][9], int row, int col)
{
int i, j; // Count // recursive , Set up exits : If the line number row Beyond array row subscript , Exit recursive output answer
if (row > 8)
{
for (i = 0; i < 9; i++)
{
for (j = 0; j < 9; j++)
printf("%d ", array[i][j]);
printf("\n");
}
return;
}
// If array[row][col] == 0 That is, the number of this position is not determined
if (array[row][col] == 0)
{
for (i = 1; i < 10; i++)
// from 1 to 9 Start counting for(i = 1;i < 10;i++)
// Trial method : Judge whether there are duplicate numbers on the row and column of this position , Then judge where you are 3x3 Is it repeated in the palace
// If 1 to 9 There is a suitable number in , Then the number of this position is this number , And start traversing the next location
if (RowAndColRepeat(array, row, col, i) && BlockRepeat(array, row, col, i))
{
array[row][col] = i;
calculation(array, row + (col + 1) / 9, (col + 1) % 9); // When the cells of each row have been traversed , Go to the next line
}
array[row][col] = 0; // If there is no or incorrect number , Is reset to 0
}
else
{
// If the number of this position is determined, skip this position , Traverse the next position
calculation(array, row + (col + 1) / 9, (col + 1) % 9); // When the cells of each row have been traversed , Go to the next line
}
}
int main()
{
int array[9][9];// Make a statement 9x9 Sudoku matrix
printf(" Please enter the title :\n");
readMatrix(array);// Read Sudoku topics
printf("\n The result of the calculation is :\n");
calculation(array, 0, 0);// Start deep search from the first cell
system("pause");// Pause window , Show results
return 0;
}
The effect is as follows :
Then there is the action , Write the answer into the question !!
There are still better ways , Welcome to the comment area to discuss ~~
边栏推荐
- [Yunju entrepreneurial foundation notes] Chapter II entrepreneur test 16
- DDoS attacks - are we really at war?
- MySQL winter vacation self-study 2022 11 (7)
- Thinking on Architecture Design (under continuous updating)
- [Yunju entrepreneurial foundation notes] Chapter II entrepreneur test 15
- 零基础自学STM32-野火——GPIO复习篇——使用绝对地址操作GPIO
- Redis cluster deployment based on redis5
- Shell脚本更新存储过程到数据库
- RobotFramework入门(二)appUI自动化之app启动
- [Yunju entrepreneurial foundation notes] Chapter II entrepreneur test 6
猜你喜欢
[Yunju entrepreneurial foundation notes] Chapter II entrepreneur test 22
PMP practice once a day | don't get lost in the exam -7.5
Building the prototype of library functions -- refer to the manual of wildfire
Zero foundation self-study STM32 - Review 2 - encapsulating GPIO registers with structures
【MySQL 15】Could not increase number of max_ open_ files to more than 10000 (request: 65535)
好用的 JS 脚本
米家、涂鸦、Hilink、智汀等生态哪家强?5大主流智能品牌分析
Shell script updates stored procedure to database
淘宝焦点图布局实战
2345文件粉碎,文件强力删除工具无捆绑纯净提取版
随机推荐
[Yunju entrepreneurial foundation notes] Chapter II entrepreneur test 24
RobotFramework入门(三)WebUI自动化之百度搜索
MySQL winter vacation self-study 2022 11 (9)
[Digital IC manual tearing code] Verilog asynchronous reset synchronous release | topic | principle | design | simulation
[Yunju entrepreneurial foundation notes] Chapter II entrepreneur test 6
HttpRunnerManager安装(三)-Linux下配置myql数据库&初始化数据
I changed the driver to 5.1.35, but it is still the same error. I can succeed even now, but I will report this every time I do an SQL operation
一位博士在华为的22年
[Yunju entrepreneurial foundation notes] Chapter II entrepreneur test 17
Bigder:34/100 面试感觉挺好的,没有收到录取
Microsoft speech synthesis assistant v1.3 text to speech tool, real speech AI generator
纯Qt版中国象棋:实现双人对战、人机对战及网络对战
淘宝焦点图布局实战
Trends in DDoS Attacks
米家、涂鸦、Hilink、智汀等生态哪家强?5大主流智能品牌分析
Referenceerror: primordials is not defined error resolution
构建库函数的雏形——参照野火的手册
力扣今日題-729. 我的日程安排錶 I
Thinking on Architecture Design (under continuous updating)
Universal crud interface