求C语言数独游戏辅助代码

2024年11月22日 23:37
有1个网友回答
网友(1):

/*************************************************************
功能:数独游戏助手。
*************************************************************/
#include
int fun(int a[9][9][10],int i,int j,int t);
void main()
{
int a[9][9][10];//三维数组
int i,j,k=0;
int t;
int p=0;
int n=10;
//对数独初始化
for(i=0;i<9;i++)
for(j=0;j<9;j++)
for(k=0;k<10;k++)
a[i][j][k]=k;
//开始输入题目
printf("请输入数独表:\n");
for(i=0;i<9;i++)
{
printf("第%d行:",i+1);
for(j=0;j<9;j++)
{
scanf("%d",&t);
if(t!=0)
{
a[i][j][0]=t;
fun(a,i,j,t);
}
}
}
//自动寻找可能值中为
while(n--)
{
for(i=0;i<9;i++)
for(j=0;j<9;j++)
{
if(a[i][j][0]==0)
{
for(k=1;k<10;k++)
{
if(a[i][j][k]!=0)
{
p++;
if(p==1)
t=a[i][j][k];
if(p>=2)
{
p=0;
t=0;
break;
}
}
}
if(p!=0)
{
if(t!=0)
{
a[i][j][0]=t;
fun(a,i,j,t);
p=0;
}
}
}
}
}
//输出可能值
for(i=0;i<9;i++)
for(j=0;j<9;j++)
{
printf("i=%d,j=%d",i+1,j+1);
for(k=1;k<10;k++)
if(a[i][j][k])
printf("%3d",a[i][j][k]);
printf("\n");
}

//开始输出
k=0;
for(i=0;i<9;i++)
for(j=0;j<9;j++)
{
printf("%3d",a[i][j][0]),k++;
if(k%9==0)
printf("\n");
}

}
//求出每一个未知数的可能的值
int fun(int a[9][9][10],int i,int j,int t)
{
int k;
for(k=1;k<10;k++)
a[i][j][k]=0;//a[i][j]为全部为0
for(int j1=0;j1<9;j1++)
{
if(j1!=j)
a[i][j1][t]=0;//第j列不能有t,将t置0
}
for(int i1=0;i1<9;i1++)
{
if(i1!=i)
a[i1][j][t]=0;//第i行不能有t,将t置0
}
if(i<3)//行0,1,2
{
if(j<3)//列0,1,2
{
for(int i1=0;i1<=2;i1++)
for(int j1=0;j1<=2;j1++)
{
if(i1!=i && j1!=j)
a[i1][j1][t]=0;
}
}//第一个九宫格
else if(j>5)//列6,7,8
{
for(int i1=0;i1<=2;i1++)
for(int j1=6;j1<=8;j1++)
{
if(i1!=i && j1!=j)
a[i1][j1][t]=0;
}
}//第三个九宫格
else//列3,4,5
{
for(int i1=0;i1<=2;i1++)
for(int j1=3;j1<=5;j1++)
{
if(i1!=i && j1!=j)
a[i1][j1][t]=0;
}
}//第二个九宫格
}
else if(i>5)//行6,7,8
{
if(j<3)//列0,1,2
{
for(int i1=6;i1<=8;i1++)
for(int j1=0;j1<=2;j1++)
{
if(i1!=i && j1!=j)
a[i1][j1][t]=0;
}
}//第七个九宫格
else if(j>5)//列6,7,8
{
for(int i1=6;i1<=8;i1++)
for(int j1=6;j1<=8;j1++)
{
if(i1!=i && j1!=j)
a[i1][j1][t]=0;
}
}//第九个九宫格
else//列3,4,5
{
for(int i1=6;i1<=8;i1++)
for(int j1=3;j1<=5;j1++)
{
if(i1!=i && j1!=j)
a[i1][j1][t]=0;
}
}//第八个九宫格
}
else//行3,4,5
{
if(j<3)//列0,1,2
{
for(int i1=3;i1<=5;i1++)
for(int j1=0;j1<=2;j1++)
{
if(i1!=i && j1!=j)
a[i1][j1][t]=0;
}
}//第四个九宫格
else if(j>5)//列6,7,8
{
for(int i1=3;i1<=5;i1++)
for(int j1=6;j1<=8;j1++)
{
if(i1!=i && j1!=j)
a[i1][j1][t]=0;
}
}//第六个九宫格
else//列3,4,5
{
for(int i1=3;i1<=5;i1++)
for(int j1=3;j1<=5;j1++)
{
if(i1!=i && j1!=j)
a[i1][j1][t]=0;
}
}//第五个九宫格
}
return 1;
}
//对三维数组排序
void paixu(int a[9][9][10])
{
int i,j,k;
int t;
for(i=0;i<9;i++)
for(j=0;j<9;j++)
{
for(int i1=1;i1<=9;i1++)
{
k=i1;
for(int j1=i1;j1<=9;j1++)
if(a[i][j][j1]>a[i][j][k])
k=j1;
t=a[i][j][k];
a[i][j][k]=a[i][j][i1];
a[i][j][i1]=t;
}
}

}
//程序在VC++6,.0环境中可运行。不懂的追问哦!