有一个算法问题!
大家玩过数独吗? 我想写一个数独的检查函数,但遇到了算法难题,大家帮帮忙:
我想问怎么写 检查数独3*3的每个区中的数字是否重复的函数 怎么写?
游戏玩法:
我的程序是将数独放在9*9的2维数组中传给函数
[此贴子已经被作者于2006-8-16 15:11:01编辑过]
----------------解决方案--------------------------------------------------------
#include"stdio.h"
int aaaa(int a[][9]);
main()
{int a[9][9],i,j,k;
for(i=0;i<9;i++)
for(j=0;j<9;j++)
scanf("%d",&a[i][j]);
k=aaaa(a);
if(k) {for(i=0;i<9;i++)
{printf("\n");
for(j=0;j<9;j++)
printf("%d ",a[i][j]);
printf("\n");
}}
else
{
printf("shu ru you wu\n");
printf("shi fou yao cong lai:Y/N\n");
}
}
int aaaa(int a[][9])
{int i,j,t,k,*b,n,c[9];
for(i=0;i<9;i++)
for(j=0;j<8;j++)
for(k=j+1;k<9;k++)
{if(a[i][j]==a[i][k]) return 0;
if(a[j][i]==a[k][i]) return 0;}
for(n=0;n<3;n++)
{b=&a[0][0];b+=n*18;
for(t=0;t<3;t++)
{ b+=t*3;
for(i=0,k=0;i<9;i++)
{k++;
if(k%3==0) b+=6;
c[i++]=*(b++);}
for(i=0;i<8;i++)
for(j=i+1;j<9;j++)
if(c[i]==c[j]) return 0;}}
return 1;
}
----------------解决方案--------------------------------------------------------
不会英语用拼音的,各位大虾委屈下眼睛
----------------解决方案--------------------------------------------------------
虚心请教各位大虾,为什么该成这样goto好象没作用一样输入错的也不能重新输入
#include"stdio.h"
int aaaa(int a[][9]);
main()
{int a[9][9],i,j,k;
char z;
zailai:
for(i=0;i<9;i++)
for(j=0;j<9;j++)
scanf("%d",&a[i][j]);
k=aaaa(a);
if(k) {for(i=0;i<9;i++)
{printf("\n");
for(j=0;j<9;j++)
printf("%d ",a[i][j]);
printf("\n");
}}
else
{
printf("shu ru you wu\n");
printf("shi fou yao cong lai:Y/N\n");
scanf("%c",&z);
if(z=='Y')
goto zailai;
}
getchar();
}
int aaaa(int a[][9])
{int i,j,t,k,*b,n,c[9];
for(i=0;i<9;i++)
for(j=0;j<8;j++)
for(k=j+1;k<9;k++)
{if(a[i][j]==a[i][k]) return 0;
if(a[j][i]==a[k][i]) return 0;}
for(n=0;n<3;n++)
{b=&a[0][0];b+=n*18;
for(t=0;t<3;t++)
{ b+=t*3;
for(i=0,k=0;i<9;i++)
{k++;
if(k%3==0) b+=6;
c[i++]=*(b++);}
for(i=0;i<8;i++)
for(j=i+1;j<9;j++)
if(c[i]==c[j]) return 0;}}
return 1;
}
----------------解决方案--------------------------------------------------------
有点晕哦,建议另写一个输入函数,判断函数
----------------解决方案--------------------------------------------------------
以下是引用多维数组在2006-8-16 15:08:43的发言:
大家玩过数独吗? 我想写一个数独的检查函数,但遇到了算法难题,大家帮帮忙:
我想问怎么写 检查数独3*3的每个区中的数字是否重复的函数 怎么写?
游戏玩法:
document.body.clientWidth*0.5) {this.resized=true;this.width=document.body.clientWidth*0.5;this.style.cursor='pointer';} else {this.onclick=null}" alt="" />
document.body.clientWidth*0.5) {this.resized=true;this.width=document.body.clientWidth*0.5;this.style.cursor='pointer';} else {this.onclick=null}" alt="" />
我的程序是将数独放在9*9的2维数组中传给函数
如果只是"检查数独3*3的每个区中的数字是否重复的函数",那还是比较简单的,
const int N=10;
int num[N];//num[i]表示数字i出现的次数
对3*3的每个区的数进行统计,
只有num[i]都为1的才合法.
总共也就9个区.
----------------解决方案--------------------------------------------------------
提示: 作者被禁止或删除 内容自动屏蔽