C/C++编程小练习 数独(DFS算法实现)
来源:互联网 发布:淘宝运营推广区别 编辑:程序博客网 时间:2024/06/12 14:02
数独(DFS算法实现)
代码:
#include <cstdio>#include <cstdlib>int test[9][9]={0,0,5,3,0,0,0,0,0,8,0,0,0,0,1,0,2,0,0,7,0,0,1,0,5,0,0,4,0,0,0,0,5,3,0,0,0,1,0,0,7,0,0,0,6,0,0,3,2,9,0,0,8,0,0,6,0,5,0,0,0,0,9,0,0,0,0,0,0,0,3,0,0,0,0,0,0,9,7,0,0};int mark[9][9];bool flag=true;bool ok=false;int cnt;void dfs(int m,int n);int main(){ for(int i=0;i<9;++i){ for(int j=0;j<9;++j){ if(test[i][j]!=0){ mark[i][j]=1; } } }dfs(0,0);return 0;}void dfs(int m,int n){ if(ok==true){ return; } if(m==8&&n==9){//边界 printf("%d:\n",++cnt); for(int i=0;i<9;++i){ for(int j=0;j<9;++j){ printf("%d ",test[i][j]); } printf("\n"); } printf("\n"); ok=true; return; }else{ if(n==9){//一行到了边界 dfs(m+1,0); return ; } if(mark[m][n]==1){//若填过了 dfs(m,n+1);//跳到下一格 return; } for(int i=1;i<=9;++i){ for(int x=0;x<9;++x){ for(int y=0;y<9;++y){ if(mark[m][y]==1&&test[m][y]==i|| mark[x][n]==1&&test[x][n]==i){ flag=false; goto X; } } } if(flag==true){ mark[m][n]=1; test[m][n]=i; dfs(m,n+1); mark[m][n]=0; } X: //这里输出一个解后就跳出了,把goto去掉会生成所有解 flag=true; } }}
运行结果会生成多个解(去掉goto)
0 0
- C/C++编程小练习 数独(DFS算法实现)
- C编程小练习
- 算法练习---数独游戏
- C/C++编程小练习 八皇后问题(回溯算法实现)
- C/C++编程小练习 计算10亿之内的素数和(合数筛选算法实现)
- C/C++编程小练习 大数乘方(快速幂算法实现)
- C语言编程小练习
- C 一个完成数独的小程序
- 数独 C语言 解数独
- C/C++编程小练习 函数实现学生管理系统
- “数独”游戏-Java-dfs搜索算法
- C回溯算法高效解标准数独
- 经典数独游戏+数独求解器—纯C语言实现
- 数独C语言解法
- C语言 数独 递归
- Javascript实现数独算法
- 数独生成算法实现
- 编程练习5——数独
- 学习笔记之JavaSE(37)--JavaAPI详解12
- 【泛型——这才真正的理解你】
- Bootstrap免费 CDN 加速服务/Bootstrap文件怎么引入
- linux下文件复制
- 微信开放平台网页扫码登录,href自定义CSS样式无效的原因和解决办法
- C/C++编程小练习 数独(DFS算法实现)
- MYSQL
- 链表基本操作
- 继续(3n+1)猜想 (25)
- 关于深拷贝和浅拷贝
- AndroidManifest.xml权限设置
- LayoutInflater.Factory 妙用
- java 多态
- Android总结篇系列:Android Intent