C语言实现数独游戏的求解
玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个同色九宫内的数字均含1-9,不重复。
输入包含9x9的已知数字,空位用0补齐,中间用空格隔开。(输入数独题目确保正确)
输出为输入数独题目的解。
样例输入:
800000000
003600000
070090200
050007000
000045700
000100030
001000068
008500010
090000400
样例输出:
812753649
943682175
675491283
154237896
369845721
287169534
521974368
438526917
796318452
C语言代码样例
#include#include int*fillnumber(inta[9][9][10],intnumber,inti,intj){ for(intk=0;k<9;k++){ a[i][k][number]++; a[k][j][number]++; } for(intn=0;n<3;n++){ for(intm=0;m<3;m++){ a[i/3*3+n][j/3*3+m][number]++; } } returna; } int*resetnumber(inta[9][9][10],intnumber,inti,intj){ for(intk=0;k<9;k++){ a[i][k][number]--; a[k][j][number]--; } for(intn=0;n<3;n++){ for(intm=0;m<3;m++){ a[i/3*3+n][j/3*3+m][number]--; } } returna; } voidsearch(intstep,inta[9][9],intg[9][9][10]){ if(step==0){ for(inti=0;i<9;i++){ for(intj=0;j<9;j++){ printf("%d",a[i][j]); } printf("\n"); } exit(0); } for(inti=0;i<9;i++){ for(intj=0;j<9;j++){ if(a[i][j]==0){ for(intnumber=1;number<10;number++){ if(g[i][j][number]==0){ fillnumber(g,number,i,j); a[i][j]=number; search(step-1,a,g); a[i][j]=0; resetnumber(g,number,i,j); } } return; } } } } intmain(intargc,constchar*argv[]){ inta[9][9]; intabool[9][9][10]; intstep=0; for(inti=0;i<9;i++){ for(intj=0;j<9;j++){ for(intk=1;k<10;k++){ abool[i][j][k]=0; } } } for(inti=0;i<9;i++){ for(intj=0;j<9;j++){ scanf("%d",&a[i][j]); if(a[i][j]==0){ step++; } else{ fillnumber(abool,a[i][j],i,j); } } } search(step,a,abool); return0; }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。