当前位置:网站首页>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 ~~
边栏推荐
- Which ecology is better, such as Mi family, graffiti, hilink, zhiting, etc? Analysis of five mainstream smart brands
- Spherical lens and cylindrical lens
- [Yunju entrepreneurial foundation notes] Chapter II entrepreneur test 15
- [Yunju entrepreneurial foundation notes] Chapter II entrepreneur test 11
- 深度解析链动2+1模式,颠覆传统卖货思维?
- 零基础自学STM32-野火——GPIO复习篇——使用绝对地址操作GPIO
- 剑指 Offer 30. 包含min函数的栈
- Briefly describe the implementation principle of redis cluster
- 2022 eye health exhibition, vision rehabilitation exhibition, optometry equipment exhibition, eye care products exhibition, eye mask Exhibition
- Formatting occurs twice when vs code is saved
猜你喜欢
[Yunju entrepreneurial foundation notes] Chapter II entrepreneur test 16
剑指 Offer 29. 顺时针打印矩阵
[Yunju entrepreneurial foundation notes] Chapter II entrepreneur test 7
LeetCode 103. Binary tree zigzag level order transverse - Binary Tree Series Question 5
[matlab] access of variables and files
Minecraft 1.16.5 biochemical 8 module version 2.0 storybook + more guns
RobotFramework入门(二)appUI自动化之app启动
Déduisez la question d'aujourd'hui - 729. Mon emploi du temps I
Introduction to robotframework (II) app startup of appui automation
[Wu Enda machine learning] week5 programming assignment EX4 - neural network learning
随机推荐
Briefly describe the implementation principle of redis cluster
模板_求排列逆序对_基于归并排序
[Yunju entrepreneurial foundation notes] Chapter II entrepreneur test 13
Zero basic self-study STM32 wildfire review of GPIO use absolute address to operate GPIO
Qt发布exe软件及修改exe应用程序图标
有沒有sqlcdc監控多張錶 再關聯後 sink到另外一張錶的案例啊?全部在 mysql中操作
Data preparation
Redis installation
我把驱动换成了5.1.35,但是还是一样的错误,我现在是能连成功,但是我每做一次sql操作都会报这个
Introduction to robotframework (III) Baidu search of webui automation
[Yunju entrepreneurial foundation notes] Chapter II entrepreneur test 8
A doctor's 22 years in Huawei
Number conclusion LC skimming review - 1
Gifcam v7.0 minimalist GIF animation recording tool Chinese single file version
GifCam v7.0 极简GIF动画录制工具中文单文件版
[Wu Enda machine learning] week5 programming assignment EX4 - neural network learning
2020.02.11
数据准备工作
Referenceerror: primordials is not defined error resolution
剑指 Offer 29. 顺时针打印矩阵