
思路:首先每一行遍历查找是否重复,在每一列查找重复,最后对3*3框框进行遍历查找是否重复
tips:由于数据量较少,不用害怕使用多重循环导致超时
第一步:
for(int i=0;i<9;i++)
{//i控制行
for(int j=0;j<9;j++)
{//j控制每列
for(int m=j+1;m<9;m++)
{//对该行的这个数进行比对,判断在该行是否有重复
if(board[i][j]!='.')
{
if(board[i][j]==board[i][m])
{
return false;
}
}
}
}
}
对每列的查找可以用类似的方法得到
接下来:
int flag;//设置标志变量,判断数是否重复出现
int val1=0,val2=0;//为了简化代码,再设置两个变量,控制每个3*3框框位置
while(val1<=6)//最外层两个while循环是为了减少代码量
{
val2=0;
while(val2<=6)
{
for(int m=1;m<=9;m++)
{
flag=0;
for(int i=val1;i<val1+3;i++)
{
for(int j=val2;j<val2+3;j++)
{
if(board[i][j]==m+'0')
{
flag++;
}
}
}
if(flag>1)
{
return false;
}
}
val2=val2+3;
}
val1=val1+3;
}
多重嵌套循环光看代码容易头晕,建议通过执笔从外向内一步一描述
最后有什么疑问,可以在下方留言。虽然我也不一定会。