当前位置:网站首页>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 ~~
边栏推荐
- 2345文件粉碎,文件强力删除工具无捆绑纯净提取版
- 我把驱动换成了5.1.35,但是还是一样的错误,我现在是能连成功,但是我每做一次sql操作都会报这个
- 2022.02.13
- Minecraft 1.16.5 biochemical 8 module version 2.0 storybook + more guns
- Number conclusion LC skimming review - 1
- 2345 file shredding, powerful file deletion tool, unbound pure extract version
- MySQL winter vacation self-study 2022 11 (9)
- Sword finger offer 30 Stack containing min function
- QT release exe software and modify exe application icon
- 3D drawing ()
猜你喜欢
[Yunju entrepreneurial foundation notes] Chapter II entrepreneur test 6
Ue4- how to make a simple TPS role (II) - realize the basic movement of the role
ReferenceError: primordials is not defined错误解决
The third level of C language punch in
[untitled] a query SQL execution process in the database
PAT甲级 1033 To Fill or Not to Fill
Solution: attributeerror: 'STR' object has no attribute 'decode‘
Which ecology is better, such as Mi family, graffiti, hilink, zhiting, etc? Analysis of five mainstream smart brands
Initial understanding of pointer variables
淘宝焦点图布局实战
随机推荐
[Yunju entrepreneurial foundation notes] Chapter II entrepreneur test 13
07 单件(Singleton)模式
事故指标统计
[matlab] access of variables and files
RobotFramework入门(二)appUI自动化之app启动
Zero foundation self-study STM32 - Review 2 - encapsulating GPIO registers with structures
[Yunju entrepreneurial foundation notes] Chapter II entrepreneur test 14
How to improve the enthusiasm of consumers when the member points marketing system is operated?
Y a - t - il des cas où sqlcdc surveille plusieurs tables et les associe à une autre? Tout fonctionne dans MySQL
HttpRunnerManager安装(三)-Linux下配置myql数据库&初始化数据
A doctor's 22 years in Huawei
[Digital IC manual tearing code] Verilog asynchronous reset synchronous release | topic | principle | design | simulation
2022 eye health exhibition, vision rehabilitation exhibition, optometry equipment exhibition, eye care products exhibition, eye mask Exhibition
Introduction to robotframework (I) brief introduction and use
RobotFramework入门(三)WebUI自动化之百度搜索
好用的 JS 脚本
Accident index statistics
有沒有sqlcdc監控多張錶 再關聯後 sink到另外一張錶的案例啊?全部在 mysql中操作
inherited constructors
Paper notes: limit multi label learning galaxc (temporarily stored, not finished)