题解
2025-07-14 19:57:20
发布于:广东
11阅读
0回复
0点赞
#include<iostream>
using namespace std;
int mp[15][15];
bool tryFill(int x,int y,int val)
{
//检查行
for (int i=1;i<=9;i++)//枚举列
{
if (mp[x][i]==val)
{
return 0;
}
}
//检查列
for (int i=1;i<=9;i++)//枚举行
{
if (mp[i][y]==val)
{
return 0;
}
}
//检查九宫格
x--,y--;
int startX=x-x%3+1,startY=y-y%3+1;
for (int i=0;i<3;i++)
{
for (int j=0;j<3;j++)
{
if (mp[startX+i][startY+j]==val)
{
return 0;
}
}
}
return 1;
}
bool solve()
{
for (int i=1;i<=9;i++)
{
for (int j=1;j<=9;j++)
{
if (mp[i][j]==0)
{
for (int val=1;val<=9;val++)
{
if (tryFill(i,j,val))
{
mp[i][j]=val;
if (solve())
{
return 1;
}
mp[i][j]=0;
}
}
return 0;
}
}
}
return 1;
}
int main()
{
for (int i=1;i<=9;i++)
{
for (int j=1;j<=9;j++)
{
cin>>mp[i][j];
}
}
if (solve())
{
for (int i=1;i<=9;i++)
{
for (int j=1;j<=9;j++)
{
cout<<mp[i][j]<<" ";
}
cout<<"\n";
}
}
return 0;
}
这里空空如也
有帮助,赞一个