回溯法解数独问题
来源:互联网 发布:mac 连接虚拟机ubuntu 编辑:程序博客网 时间:2024/06/06 05:20
#include<stdio.h>#include<stdlib.h>#include<algorithm>#include<iostream>int map[9][9];void show(){for(int i=0;i<9;i++){for(int j=0;j<9;j++){printf("%d ",map[i][j]);}printf("\n");}}int isok(int x,int y,int n){int xx,yy,i,j;xx=x/3*3;yy=y/3*3;for(i=0;i<9;i++){if(map[x][i]==n||map[i][y]==n)return 0;}for(i=xx;i<xx+3;i++){for(j=yy;j<yy+3;j++){if(map[i][j]==n)return 0;}}return 1;}void fun(int x,int y){if(x>=9&&y==0){show();}else if(map[x][y]!=0){if(y+1==9) fun(x+1,0);elsefun(x,y+1);}else{//候选数方法 int n,m,i,j;int num[10];n=x/3*3;m=y/3*3;for(i=1;i<10;i++)//初始化数组 num[i]=0;for(i=0;i<9;i++){if(map[x][i]!=0)num[map[x][i]]=1;}for(i=0;i<9;i++){if(map[i][y]!=0)num[map[i][y]]=1;}for(i=n;i<n+3;i++){for(j=m;j<m+3;j++){if(map[i][j]!=0)num[map[i][j]]=1;}}for(i=1;i<=9;i++){if(num[i]==0){map[x][y]=i;if(y+1==9){fun(x+1,0);}else{fun(x,y+1);}map[x][y]=0;}/*if(isok(x,y,i)){//另一种方法 map[x][y]=i;if(y+1==9){fun(x+1,0);}else{fun(x,y+1);}map[x][y]=0;}*/}}}int main(){for(int i=0;i<9;i++){for(int j=0;j<9;j++){scanf("%1d",&map[i][j]);}}printf("\n");fun(0,0);return 0;}
代码测试:
0 0
- 回溯法解数独问题
- 回溯法解数独
- 回溯法解数独
- 回溯法解数独
- 解数独-回溯法
- 回溯法解数独题
- 回溯法解数独游戏
- 算法之6-回溯法解数独问题
- Java回溯算法解数独问题
- 回溯法----- 解数独游戏(1)
- 回溯法------ 解数独游戏(2)
- 回溯法简单应用--解数独
- 回溯算法解数独问题(java版)
- 回溯算法解数独问题(java版)
- [人工智能]回溯算法解数独
- 【算法分析】回溯法解数独(九宫格)算法
- 递归暴力破解法解数独问题
- DFS解数独问题
- 魔术索引1
- 如何去掉滑动控件(比如ScrollView、ListView、ViewPager等)滑动到最顶部或最底部时出现的阴影效果。
- iOS多线程之pthread
- 二进制的1111 1111如何才能得到255的结果
- Java中String类的常用方法及stringbuffer - -音
- 回溯法解数独问题
- 从昨天这个时候到现在
- jvm(2)-java内存区域
- Android开发实践:自定义ViewGroup的onLayout()分析
- 如何查看JSP和Servlet版本
- jQuery.data方法
- 第一章:JavaScript基本介绍
- eclipse生成javadoc文档
- 简体中文转繁体的python简单实现