今天晚上玩了一会数独,玩的头都疼了,于是想自己写一个解决数独的程序,但本人比较渣。。只写出了能解决比较简单的题的程序。。(难的我都不会更别提写出程序让它会了)要是输入题目半天没反应,八成是做不出来了~~~(不要喷我。。)
#include<iostream>
#include<stdio.h>
using namespace std;
int num[9][9]={0};
bool judge[10];
void Scan_num()
{
for(int i=0;i<9;i++)
for(int j=0;j<9;j++)
scanf("%d",&num[i][j]);
}
bool Find_zero()
{
bool kase=false;
for(int i=0;i<9;i++)
for(int j=0;j<9;j++)
if(num[i][j]==0)
{
kase=true;
break;
}
return kase;
}
int Judge_x(int* i,int* j)
{
for(int m=0;m<10;m++) judge[m]=false;
for(int m=0;m<9;m++)
{
judge[num[*i][m]]=true;
judge[num[m][*j]]=true;
}
int x1=*i/3,x2=*j/3;
for(int m=x1*3;m<x1*3+3;m++)
for(int n=x2*3;n<x2*3+3;n++)
judge[num[m][n]]=true;
int sum=0;
for(int m=1;m<10;m++)
{
if(judge[m]) sum++;
}
return sum;
}
void Print_num()
{
printf("\n");
for(int i=0;i<9;i++)
{
for(int j=0;j<9;j++)
{
printf("%d ",num[i][j]);
}
printf("\n");
}
}
int Sum_zero()
{
int sum=0;
for(int i=0;i<9;i++)
for(int j=0;j<9;j++)
if(num[i][j]==0) sum++;
return sum;
}
int Get_num()
{
for(int i=1;i<10;i++)
if(!judge[i]) return i;
for(int m=0;m<10;m++) judge[m]=false;
}
int main()
{
int x=0;
Scan_num();
while(Find_zero())
{
for(int i=0;i<9;i++)
for(int j=0;j<9;j++)
{
if(num[i][j]==0 && Judge_x(&i,&j)==8) num[i][j]=Get_num();
}
int sum=Sum_zero();
x=sum;
}
Print_num();
return 0;
}