DFS解数独问题
来源:互联网 发布:linux 病毒查杀 编辑:程序博客网 时间:2024/05/29 13:46
#include<stdio.h>#define M 9int a[M][M],count;void print(){int i,j;for(i=0; i<M; i++){for(j=0; j<M; j++){printf("%d ",a[i][j]);}printf("\n");}printf("\n");}int check(int m,int n){int i,j;for(i=0; i<M; i++) //检测行重复{if(i!=m && a[i][n]==a[m][n])return 0;}for(i=0; i<M; i++) //检测列重复{if(i!=n && a[m][i]==a[m][n])return 0;}for(i=m/3*3; i<(m/3+1)*3; i++) //检测block重复for(j=n/3*3; j<(n/3+1)*3; j++){if((i!=m || j!=n) && a[i][j]==a[m][n])return 0;}return 1;}void f(int m,int n){ int k;if(count==0) //所有空格都填好,则输出结果{print();return;}if(a[m][n]==0){for(k=1; k<=M; k++){count--;a[m][n]=k;//print();if(check(m,n)){if(n<M-1)f(m,n+1);elsef(m+1,0);} a[m][n]=0;count++;}}else{if(n<M-1) f(m,n+1);else f(m+1,0);}}int main(){int i,j;FILE *fp;fp = fopen("puzzle.txt","r");for(i=0; i<M; i++)for(j=0; j<M; j++){fscanf(fp,"%1d",&a[i][j]);if(a[i][j]==0) count++;}print();f(0,0);fclose(fp);return 0;}/*需有一个puzzle.txt文件,数据格式如下:例子:200080300060070084030500209000105408000000000402706000301007040720040060004010003*/
0 0
- DFS解数独问题
- 回溯法解数独问题
- 解数独
- 解数独
- C语言程序解数独问题
- DLX精确覆盖解数独问题
- 递归暴力破解法解数独问题
- 用舞蹈链解数独问题
- 利用Matlab优化工具箱解数独问题
- Java回溯算法解数独问题
- 算法之6-回溯法解数独问题
- 回溯算法解数独问题(java版)
- 回溯算法解数独问题(java版)
- C程序解数独
- dance links解数独
- 构造解数独
- 回溯法解数独
- 回溯法解数独
- 【最短路】民大风景(prim判环)
- example11.5.cpp 结构体指针变量做函数形参
- ACdreamer的比赛。。。
- 游客选座.cpp
- 三次握手四次挥手详解
- DFS解数独问题
- jsp由浅入深开发必备
- 选票计算.cpp
- spring 文件上传
- 网页开发的阶段总结(三)--JS与PHP直接互调用
- android之ScrollView里嵌套ListView,gridview,scrollview
- 一个api的 rt 大涨问题排查
- 数据库入门的好资料
- example11.3.cpp 指针变量指向结构体变量