数独

来源:互联网 发布:c 函数式编程 编辑:程序博客网 时间:2024/05/02 04:20

参考代码:

#include <stdio.h>#include <stdlib.h>#include <math.h>int a[9][9]={{8,0,0,0,0,0,0,0,0},{0,0,3,6,0,0,0,0,0},{0,7,0,0,9,0,2,0,0},{0,5,0,0,0,7,0,0,0},{0,0,0,0,4,5,7,0,0},{0,0,0,1,0,0,0,3,0},{0,0,1,0,0,0,0,6,8},{0,0,8,5,0,0,0,1,0},{0,9,0,0,0,0,4,0,0}};long count=0;bool test(int x,int y){int i,j;int left,up;for(i=0;i<9;i++){if(i!=y&&a[x][y]==a[x][i])return false;if(i!=x&&a[x][y]==a[i][y])return false;}left=y/3*3;up=x/3*3;for(i=up;i<up+3;i++)for(j = left;j < left + 3;j++)if(x!=i && y!=j && a[x][y]==a[i][j])return false;return true;}void backtrack(int x,int y){int i,j;if(x==9){for(i=0;i<9;i++){for(j=0;j<9;j++)printf("%d\t",a[i][j]);putchar('\n');putchar('\n');}printf("OK!\n");exit(1);}else{if(y==9){x++;y=0;backtrack(x,y);}else{if(a[x][y]==0){for(i=1;i<10;i++){a[x][y]=i;if(test(x,y)){backtrack(x,y+1);}}a[x][y]=0;}elsebacktrack(x,y+1);}}}int main(){/*int i,j;printf("输入:\n");for(i=0;i<9;i++){for(j=0;j<9;j++){scanf("%d",&a[i][j]);}}*/printf("结果:\n");backtrack(0,0);return 0;}


0 0
原创粉丝点击