九宫格是在81个格子中,要满足以下条件:(1)每个横行和竖列中的9个格子都包含数字1至9,不重复;(2)每个黑色粗实线围住的9个格子都包含数字1至9,不重复。如下表所示:7 6 1 9 3 4 8 2 5

3 5 4 6 2 8 1 9 7

9 2 8 1 5 7 6 3 4

2 1 9 5 4 6 3 7 8

4 8 3 2 7 9 5 1 6

5 7 6 3 8 1 9 4 2

1 9 5 7 6 2 4 8 3

8 3 2 4 9 5 7 6 1

6 4 7 8 1 3 2 5 9

要求找出给定数字的九宫格。

【输入形式】

输入9行9列81个数字,其中0表示要填的数字。

【输出形式】

输出满足条件的九宫格。

【输入样例】0 6 1 0 3 0 0 2 0

0 5 0 0 0 8 1 0 7

0 0 0 0 0 7 0 3 4

0 0 9 0 0 6 0 7 8

0 0 3 2 0 9 5 0 0

5 7 0 3 0 0 9 0 0

1 9 0 7 0 0 0 0 0

8 0 2 4 0 0 0 6 0

0 4 0 0 1 0 2 5 0

【输出样例】7 6 1 9 3 4 8 2 5

3 5 4 6 2 8 1 9 7

9 2 8 1 5 7 6 3 4

2 1 9 5 4 6 3 7 8

4 8 3 2 7 9 5 1 6

5 7 6 3 8 1 9 4 2

1 9 5 7 6 2 4 8 3

8 3 2 4 9 5 7 6 1

6 4 7 8 1 3 2 5 9

代码及思路如下:#include

bool canFill(int a[9][9], int k, int n){

int i, j, row = k / 9, col = k % 9;

for(i = 0; i < 9; ++i){

if(a[i][col] == n){

return false;

}

}

for(j = 0; j < 9; ++j){

if(a[row][j] == n){

return false;

}

}

for(i = row - row % 3; i < row - row % 3 + 3; ++i){

for(j = col - col % 3; j < col - col % 3 + 3; ++j){

if(a[i][j] == n){

return false;

}

}

}

return true;

}

void fill(int a[9][9], int k = 0){

int i, j;

if(k == 81){

for(i = 0; i < 9; ++i){

for(j = 0; j < 9; ++j){

printf("%d ", a[i][j]);

}

printf("\n");

}

return;

}

int row = k / 9, col = k % 9;

if(a[row][col] == 0){

for(i = 1; i <= 9; ++i){

if(canFill(a, k, i)){

a[row][col] = i;

fill(a, k + 1);

a[row][col] = 0;

}

}

}else{

fill(a, k + 1);

}

}

int main(){

int i, j, a[9][9];

for(i = 0; i < 9; ++i){

for(j = 0; j < 9; ++j){

scanf("%d", &a[i][j]);

}

}

fill(a);

return 0;

}

2013年5月4日3点温习重写代码如下:#include

int square[9][9];

int isEnabled(int k, int num){

int row = k / 9;

int col = k % 9;

for(int i = 0; i < 9; ++i){

if(square[row][i] == num || square[i][col] == num){

return false;

}

}

int m = row - row % 3;

int n = col - col % 3;

for(int i = m; i < m + 3; ++i){

for(int j = n; j < n + 3; ++j){

if(square[i][j] == num){

return false;

}

}

}

return true;

}

void fill(int k = 0){

int row = k / 9;

int col = k % 9;

if(k >= 81){

for(int i = 0; i < 9; ++i){

for(int j = 0; j < 9; ++j){

printf("%d ", square[i][j]);

}

printf("\n");

}

return;

}

if(square[row][col] > 0){

fill(k + 1);

return;

}

for(int i = 1; i <= 9; ++i){

if(isEnabled(k, i)){

square[row][col] = i;

fill(k + 1);

square[row][col] = 0;

}

}

}

int main(){

for(int i = 0; i < 9; ++i){

for(int j = 0; j < 9; ++j){

scanf("%d", &square[i][j]);

}

}

fill();

return 0;

}

如需转载请注明出处:蓝飞技术部落格

c语言 九宫格还原算法,经典回溯算法问题:九宫格相关推荐

  1. 常用十大算法 非递归二分查找、分治法、动态规划、贪心算法、回溯算法(骑士周游为例)、KMP、最小生成树算法:Prim、Kruskal、最短路径算法:Dijkstra、Floyd。

    十大算法 学完数据结构该学什么?当然是来巩固算法,下面介绍了十中比较常用的算法,希望能帮到大家. 包括:非递归二分查找.分治法.动态规划.贪心算法.回溯算法(骑士周游为例).KMP.最小生成树算法:P ...

  2. 一文了解贪心算法和回溯算法在前端中的应用

    一文了解贪心算法和回溯算法在前端中的应用 一.贪心算法 1.贪心算法是什么? 2.应用场景 3.场景剖析:零钱兑换 二.回溯算法 1.回溯算法是什么? 2.什么问题适合选用回溯算法解决? 2.应用场景 ...

  3. C语言经典回溯算法之解决数的组合问题(详解)

    文章目录 一.回溯算法 二.数的组合问题 一.回溯算法 1.回溯法 也叫试探法,实际上是一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就"回溯&q ...

  4. 【C语言】算法学习·回溯算法

    目录 一.全排列问题 二.N 皇后问题 三.最后总结 回溯算法基本框架 解决一个回溯问题,实际上就是一个决策树的遍历过程.你只需要思考 3 个问题: 1.路径:也就是已经做出的选择. 2.选择列表:也 ...

  5. python回溯算法_回溯算法经典问题及python代码实现

    2. 0-1背包问题 # 0-1 bag problem import sys def f(no, cur_mass, things, num): global cur_max if no == nu ...

  6. 经典回溯算法(八皇后问题)详解

    八皇后问题,是一个古老而著名的问题,是回溯算法的典型例题.该问题是十九世纪著名的数学家高斯1850年提出: 在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同一列 ...

  7. 常用算法总结(穷举法、贪心算法、递归与分治算法、回溯算法、数值概率算法)

    博主联系方式: QQ:1540984562 微信:wxid_nz49532kbh9u22 QQ交流群:892023501 目录 1.穷举法 2.贪心算法 3.递归与分治算法 4.回溯算法 5.数值概率 ...

  8. 回溯算法和贪心算法_回溯算法介绍

    回溯算法和贪心算法 回溯算法 (Backtracking Algorithms) Backtracking is a general algorithm for finding all (or som ...

  9. C++算法学习(回溯算法)

    回溯算法 1.目标 2.方法 3.具体思路 4.例题 (1)[力扣:10. 正则表达式匹配](https://leetcode-cn.com/problems/regular-expression-m ...

最新文章

  1. iOS 百度地图使用详解
  2. 第五人格服务器维修中怎么进,第五人格进不去怎么办 游戏进不去解决方法详解[多图]...
  3. 嵌入式开发板01---点亮LED
  4. python查看运行内存占用_python中使用psutil查看内存占用的情况
  5. DNS全局负载均衡(GSLB)基本原理
  6. a6gpp php,内行人才知道的古董级玛莎拉蒂A6G 2000
  7. 致产品经理:是时候要学学编程了!
  8. mysql数据库过滤数据_MySQL数据库常规操作一些简单绕过过滤的方法
  9. sqlserver导出表结构到excel
  10. 海思烧写工具需要java_HiTool(海思芯片烧录工具)下载
  11. C语言求解鸡兔同笼问题
  12. java 裁剪图片_java实现的图片裁剪功能示例
  13. 【信息安全】EDR、HIDS、NDR、MDR、XDR 区别与联系
  14. 机器学习算法各个击破
  15. 计算机排第三!新增的工学硕士博士学位
  16. PTA-1032 挖掘机技术哪家强
  17. HSI、HSV、RGB、CMYK、HSL、HSB、Ycc、XYZ、Lab、YUV颜色模型的区别
  18. c语言6行6列元素奇数的个数,C语言任意输入n个整数,分别统计奇数的和.奇数的个数.偶数的和.偶数的个数....
  19. 关闭Nao机器人自带的摔倒保护
  20. GPU配置MatConvNet(ECO代码)

热门文章

  1. powered by php168 v6,php168整站系统V6正式版(v6.01)公开下载
  2. JDK源码中,都有哪些NB的设计模式?
  3. python是否空字典_Python-检查字典是否为空
  4. nodejs+ffmpeg视频转码
  5. DEV Gridcontrol 多选功能实现
  6. java对象克隆效率_fastclone
  7. 中国养蚕及深加工市场运行走势与盈利价值分析报告2022-2028年
  8. 黄石城市职业学院计算机专业,黄石6所中职学校 14个“3+2”专业直升大学
  9. springboot瘦身打包
  10. iOS app集成使用 Facebook 深度链接