037 - Sudoku Solver

2023-12-11 11:58
文章标签 037 sudoku solver

本文主要是介绍037 - Sudoku Solver,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Write a program to solve a Sudoku puzzle by filling the empty cells.

Empty cells are indicated by the character '.'.

You may assume that there will be only one unique solution.


A sudoku puzzle...


...and its solution numbers marked in red.



求数独的解,用递归实现

static int find = 0;
int locok(char **sudu, int x, int y, int num)
{int i, j, i1, j1;if (sudu[x][y] != '.') return 2;/* check row */for (i = 0; i < 9; i++)if (i != x && sudu[i][y] == num)return 0;/* check col */for (i = 0; i < 9; i++)if (i != y && sudu[x][i] == num)return 0;/* check area */i = x / 3 * 3;j = y / 3 * 3;i1 = i + 3;j1 = j + 3;for (i = i1 - 3; i < i1; i++) for (j = j1 - 3; j < j1; j++){if (i == x && j ==y) continue;if (sudu[i][j] == num)return 0;}return 1;
}int xsudu(char *sudu[], int x, int y)
{if (x > 8 || y > 8 || x < 0 || y < 0) return -1;int i;if (x == 8 && y == 8) {for (i = 1; i < 10; i++) {int ok = locok(sudu, x, y, i + '0');if (!ok) continue;if (ok == 1)sudu[x][y] = i + '0';return find = 1;}} else {for (i = 1; i < 10; i++) {int ok = locok(sudu, x, y, i + '0');if (!ok) continue;if (ok == 1) sudu[x][y] = i + '0';xsudu(sudu, y == 8? x + 1:x, y == 8? 0:y + 1);if (find) return 0;if (ok == 1) sudu[x][y] = '.';if (ok == 2) break;}	}return 0;
}void solveSudoku(char** board, int boardRowSize, int boardColSize) 
{find = 0;xsudu(board, 0, 0);
}


这篇关于037 - Sudoku Solver的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/480597

相关文章

LeetCode - 37. Sudoku Solver

37. Sudoku Solver  Problem's Link  ---------------------------------------------------------------------------- Mean:  求解数独. analyse: 只是9宫格的数独,而且测试数据都不难,所以可以直接使用递归求解,类似于N-Queue问题. 但如果宫格

LeetCode - 36. Valid Sudoku

36. Valid Sudoku  Problem's Link  ---------------------------------------------------------------------------- Mean:  给定一个数独,判断这个数独是否合法. analyse: 略. Time complexity: O(N)   view

LeetCode 36 Valid Sudoku

题意: 判断一个填了一部分的数独有没有解。 思路: 按照数独规则判断即可,即同一行、同一列、同一个3*3的方格内没有数字重复出现。 代码: class Solution {public:bool isValidSudoku(vector <vector<char>> &board) {const int step = 3;bool app[step * step];fo

PTA L1-037 A除以B

L1-037 A除以B(10分) 真的是简单题哈 —— 给定两个绝对值不超过100的整数A和B,要求你按照“A/B=商”的格式输出结果。 输入格式: 输入在第一行给出两个整数A和B(−100≤A,B≤100),数字间以空格分隔。 输出格式: 在一行中输出结果:如果分母是正数,则输出“A/B=商”;如果分母是负数,则要用括号把分母括起来输出;如果分母为零,则输出的商应为Error。输出的商

Caffe学习系列(7):solver及其配置(学习率)

转自:http://www.cnblogs.com/denny402/p/5074049.html solver算是caffe的核心的核心,它协调着整个模型的运作。caffe程序运行必带的一个参数就是solver配置文件。运行代码一般为 caffe train --solver=*_slover.prototxt 在Deep Learning中,往往loss function是非凸的,没有解

LeetCode | Sudoku Solver

You may assume that there will be only one unique solution. A sudoku puzzle… …and its solution numbers marked in red. 数独问题,暴力深搜。 注意在找到解之后,要及时return,以及在第某一行无解的时候,要及时return,这样剪枝才不会导致超时。 class S

37. Sudoku Solver 回溯

Write a program to solve a Sudoku puzzle by filling the empty cells. Empty cells are indicated by the character '.'. You may assume that there will be only one unique solution. 回溯问题: 思路:

UnityShader源码2017---学习笔记与自我拓展037

源自Decal 只是单独这个shader,其实没有什么特别的,就是用DecalTex的A通道,去线性插值maintex和decaltex的rgb。   这里重点说一下这篇文章里的思路 这里先不说NormalCopy的由来,等写CB的时候在一起说吧。 先来推算一下computescreenpos的吧。权当给自己捋一遍。 inline float4 ComputeScreenPos(flo

【工具笔记】Microsoft数学求解器Math Solver

【工具笔记】Microsoft数学求解器Math Solver 工具笔记用于记录各种有用的工具,这里记录的是一个由Microsoft提供的数学求解器Math Solver。 可以用于求解代数,三角学,微积分,矩阵等各种数学问题,并且可以获取分步解释,查看如何解决问题并获取数学概念的定义,立即画出任何公式以可视化函数并了解变量之间的关系。还会搜索出相关的视频,练习题,类似问题等。 Math S

LeetCode第37之Sudoku Solver

主要思路:回溯法,每个‘.’的位置遍历“1-9”,如果满足则继续下一个位置,如果遍历完“1-9”仍不满足则将该位置改为‘.’,然后回溯到上一个位置。 缺点就是运行时间有点长。 C++代码: #include <iostream>#include <vector>using namespace std;//打印board矩阵void print_vec(vector<vector<cha