c语言编写求解数独
来源:互联网 发布:帝江网络 编辑:程序博客网 时间:2024/06/05 11:14
大一的第一个解决问题的程序,递归操作,很久才搞定这个程序。--
输入格式为9*9的 数字矩阵 如果没有填入数字则用0代替,用递归求解 对每个格子进行1 - 9 的尝试填入 递归操作 直到81个格子全部填入成功,输出第一个解。如果填某个格子发现不正确的时候退出这层递归返回上层。
代码如下
</pre><pre name="code" class="objc">#include <stdio.h>#define FOR(i, x, y) for(i = x; i <= y; ++i)int result = 1;void start (int a[9][9],int n);int check(int a[9][9],int i,int j, int k);void output(int a[9][9]);int main(){ int a[9][9]; int i,j; FOR(i, 0, 8) FOR(j, 0, 8) scanf("%d",&a[i][j]); start (a,0); return 0;}void output(int a[9][9]){ result--; //只需要输出第一个解 int i ,j; FOR(i, 0, 8) { FOR(j, 0, 8) printf("%d ",a[i][j]); printf("\n"); }}int check (int a[9][9],int i,int j,int k){ int i1,j1,p,q; FOR(p, 0, 8) if (a[p][j] == k) return 0; FOR(q, 0, 8) if (a[i][q] == k) //检测行与列 return 0; i1 = i / 3 * 3; j1 = j / 3 * 3; //检测九宫格 FOR(p, i1, i1 + 2) FOR(q, j1, j1 + 2) if (a[p][q] == k) return 0; return 1;}void start (int a[9][9], int n){ int r[9][9],p,q; FOR(p, 0, 8) FOR(q, 0, 8) r[p][q] = a[p][q]; int i = n / 9; int j = n % 9; if (r[i][j] != 0) { if (n == 80) output(r); else start(r,n+1); } else if (a[i][j] == 0 && result == 1) { FOR(p, 1, 9) { if (check (r, i, j, p)) { r[i][j] = p; if (n == 80) output(r); else start (r , n+1); } } }}
1 0
- c语言编写求解数独
- 数独 递归求解(C语言)
- C语言数独游戏求解
- 数独求解(c语言以及python)
- C语言——求解数独(深搜)
- 经典数独游戏+数独求解器—纯C语言实现
- 数独 C语言 解数独
- QT编写的数独求解软件、一个数独快速高效的求解算法
- 数独C语言解法
- C语言 数独 递归
- 使用Python编写程序求解数独游戏答案
- 数独游戏求解
- 求解数独
- 数独求解算法
- 求解数独
- 数独求解
- 数独算法求解
- 数独求解算法
- 算法初探——归并排序
- 认识Shiro框架
- HDU 2104 hide handkerchief
- java基础知识整理(2)
- request.getParameter() 和request.getAttribute() 区别
- c语言编写求解数独
- 古老编程环境展——LFS Linux篇
- Android 之EditText自动检索Listview中的数据
- c++程序设计第一章 开始接触c++
- 用全排列方法解决N皇后问题(Leetcode 51)
- 设计模式之状态模式
- JNI - Call Method(Callback Call java methods from c)
- java中的回调函数理解
- java基础知识整理(3)