数独求解算法

  • Z9_686080
    了解作者
  • 425.4KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • VIP专享
    资源类型
  • 0
    下载次数
  • 2022-04-05 08:50
    上传日期
此算发求解数独好快 大概也就几百次的循环 目前只能求解有唯一解的数独 进行一定优化后可求解多解数独 有好大的研究价值
_C语言.rar
  • 数独求解算法_C语言
  • Debug
  • vc60.pdb
    44KB
  • shudu_02.pch
    171.4KB
  • shudu_01.pch
    171.4KB
  • vc60.idb
    33KB
  • shudu_03.ilk
    173.7KB
  • shudu_03.pdb
    417KB
  • shudu_02.pdb
    337KB
  • shudu_02.obj
    6.9KB
  • shudu_03.obj
    13.4KB
  • shudu_03.exe
    172.1KB
  • shudu_03.pch
    171.4KB
  • shudu_01.pdb
    409KB
  • shudu_01.exe
    168.1KB
  • shudu_02.exe
    168.1KB
  • shudu_01.obj
    6.8KB
  • shudu_02.ilk
    168.9KB
  • shudu_01.ilk
    172.2KB
  • ShuDu_04.c
    3.9KB
  • shudu_02.c
    2.1KB
  • shudu_03.c
    4.4KB
  • shudu_01.c
    2.3KB
内容介绍
/***********************************************************************************************************************/ /*********************************************************************************************************************** 作者 : 熊 能 2014年01月08号 QQ:1157052375 邮箱:xiongneng_0204@sina.cn 此算法有BUG可能是解决有唯一解的那种数独 方法Detection_JiuGongGe()有问题 ***********************************************************************************************************************/ #include<stdio.h> void Input_ShuDu(); void Traverse_ShuDu(); void Update_ShuDu(int x,int y); void Output_ShuDu(); int Detection_JiuGongGe(); int Detection_Hang(); int Detection_Lie(); void Output_y1(); void Output_y2(); void Output_y3(); int a[9][9]={ {0,0,0, 0,0,3, 0,0,0}, {0,4,8, 5,0,0, 0,9,0}, {2,9,0, 7,0,0, 0,3,6}, {9,0,4, 1,0,7, 0,6,2}, {0,0,2, 0,0,0, 3,0,0}, {8,1,0, 3,0,2, 7,0,9}, {1,5,0, 0,0,9, 0,4,8}, {0,2,0, 0,0,8, 9,7,0}, {0,0,0, 6,0,0, 0,0,0} },y0[9],y1[3][3][9],y2[9][9],y3[9][9],y4[9][9],count; int main(){ printf("**************************************\n"); Input_ShuDu(); printf("**************************************\n"); Output_ShuDu(); printf("**************************************\n"); /* printf("\n %d , %d ,%d\n",Detection_JiuGongGe(),Detection_Hang(),Detection_Lie()); if( Detection_JiuGongGe() & Detection_Hang() & Detection_Lie()){ */ while(1){ Traverse_ShuDu(); if(count==0)break; } /* }else{ printf(" 您输入的数独无解!"); } printf("**************************************\n"); Output_y1(); printf("**************************************\n"); Output_y2(); printf("**************************************\n"); Output_y3(); */ Output_ShuDu(); return 0; } void Traverse_ShuDu(){ int i,j;count=0; for(i=0;i<9;i++){ for(j=0;j<9;j++){ if(a[i][j]==0){ Update_ShuDu(i,j); count++; } } } } void Update_ShuDu(int x,int y){ int i,temp,n=0; for(i=0;i<9;i++){ y0[i] = y1[x/3][y/3][i] | y2[x][i] | y3[y][i]; if(y0[i]==1){ n++; }else{ temp=i+1; } } if(n==8){ a[x][y]=temp; y1[x/3][y/3][a[x][y]-1]=1; y2[x][a[x][y]-1]=1; y3[y][a[x][y]-1]=1; //printf("a[%d][%d]=%d ",x+1,y+1,a[x][y]); } } void Input_ShuDu(){ int i,j; for(i=0;i<9;i++){ for(j=0;j<9;j++){ if(a[i][j]!=0){ y1[i/3][j/3][a[i][j]-1]=1; y2[i][a[i][j]-1]=1; y3[j][a[i][j]-1]=1; y4[i][j]=1; }else{ y4[i][j]=0; } } } } void Output_ShuDu(){ int i,j; for(i=0;i<9;i++){ if(i%3==0)printf("\n "); for(j=0;j<9;j++){ if(j%3==0)printf(" "); printf("%d ",a[i][j]); } printf("\n "); } printf("\n"); } int Detection_JiuGongGe(){ int i; for(i=0;i<9;i++){ if( !((y1[i/3][i%3][0]+y1[i/3][i%3][1]+y1[i/3][i%3][2]+y1[i/3][i%3][3]+y1[i/3][i%3][4]+y1[i/3][i%3][5]+y1[i/3][i%3][6]+y1[i/3][i%3][7]+y1[i/3][i%3][8]) == (y4[i/3+0][i%3+0]+y4[i/3+0][i%3+1]+y4[i/3+0][i%3+2]+ y4[i/3+1][i%3+0]+y4[i/3+1][i%3+1]+y4[i/3+1][i%3+2]+ y4[i/3+2][i%3+0]+y4[i/3+2][i%3+1]+y4[i/3+2][i%3+2])) ) return 0; } return 1; } int Detection_Hang(){ int i; for(i=0;i<9;i++){ if( !((y2[i][0]+y2[i][1]+y2[i][2]+y2[i][3]+y2[i][4]+y2[i][5]+y2[i][6]+y2[i][7]+y2[i][8]) == (y4[i][0]+y4[i][1]+y4[i][2]+y4[i][3]+y4[i][4]+y4[i][5]+y4[i][6]+y4[i][7]+y4[i][8])) ) return 0; } return 1; } int Detection_Lie(){ int i; for(i=0;i<9;i++){ if( !((y3[i][0]+y3[i][1]+y3[i][2]+y3[i][3]+y3[i][4]+y3[i][5]+y3[i][6]+y3[i][7]+y3[i][8]) == (y4[0][i]+y4[1][i]+y4[2][i]+y4[3][i]+y4[4][i]+y4[5][i]+y4[6][i]+y4[7][i]+y4[8][i])) ) return 0; } return 1; } void Output_y1(){ int i,j,k; printf("y1:\n"); for(i=0;i<3;i++){ for(j=0;j<3;j++){ for(k=0;k<9;k++){ if(k%3==0)printf(" "); printf("%d ",y1[i][j][k]); } printf("\n"); } printf("\n"); } } void Output_y2(){ int i,j; printf("y2:\n"); for(i=0;i<9;i++){ if(i%3==0)printf("\n"); for(j=0;j<9;j++){ if(j%3==0)printf(" "); printf("%d ",y2[i][j]); } printf("\n"); } } void Output_y3(){ int i,j; printf("y3:\n"); for(i=0;i<9;i++){ if(i%3==0)printf("\n"); for(j=0;j<9;j++){ if(j%3==0)printf(" "); printf("%d ",y3[i][j]); } printf("\n"); } }
评论
    相关推荐
    • 程序员算法
      这是一个算法文档压缩包,其中包括《可能与不可能的边界》、《具体数学》、《算法的乐趣》、《啊哈!算法》。这些书很适合对算法感兴趣的朋友,书籍讲解算法非常有趣。注意,其中有些文档是试读版本。
    • 算法实验
      算法实验算法实验算法实验算法实验算法实验算法实验算法实验算法实验
    • 大数据算法
      本书共分为10章,第1章概述大数据算法,第2章介绍时间亚线性算法,第3章介绍空间亚线性算法,第4章概述外存算法,第5章介绍大数据外存查找结构,第6章讲授外存图数据算法,第7章概述MapReduce算法,第8章通过一系列...
    • 算法
      算法 算法
    • SIFT 算法
      SIFT 算法SIFT 算法SIFT 算法SIFT 算法
    • RSA算法
      RSA算法是公钥加密算法中重要的算法之一,本算法即实现RSA的加解密过程。
    • 分词算法介分词算法
      算法 汉语分词介绍分词算法 汉语分词介绍分词算法 汉语分词介绍分词算法 汉语分词介绍分词算法 汉语分词介绍分词算法 汉语分词介绍分词算法 汉语分词介绍分词算法 汉语分词介绍分词算法 汉语分词介绍分词算法 汉语...
    • unify算法
      unify算法unify算法unify算法unify算法unify算法unify算法unify算法unify算法unify算法unify算法unify算法unify算法unify算法
    • 寻路算法
      寻路算法 寻路封装
    • dsp算法算法算法算法
      dsp各种算法