世界上最难的数独,写出程序后运行竟不到1s
#include<bits/stdc++.h>
using namespace std;
int h[20][20],l[20][20],g[20][20],a[20][20],flag;
void dfs(int x,int y)
{
if(x==10 && y==1)
{
for(register int i=1;i<=9;i++,puts(""))
for(register int j=1;j<=9;j++)
printf("%d ",a[i][j]);
flag=1;
return;
}
if(a[x][y])
{
if(y<9)
dfs(x,y+1);
else
dfs(x+1,1);
return;
}
for(register int i=1;i<=9;i++)
if(!h[x][i] && !l[y][i] && !g[(x-1)/3*3+(y+2)/3][i])
{
h[x][i]=1;
l[y][i]=1;
g[(x-1)/3*3+(y+2)/3][i]=1;
a[x][y]=i;
if(y<9)
dfs(x,y+1);
else
dfs(x+1,1);
if(flag)
return;
a[x][y]=0;
h[x][i]=0;
l[y][i]=0;
g[(x-1)/3*3+(y+2)/3][i]=0;
}
}
int main()
{
for(register int i=1;i<=9;i++)
for(register int j=1;j<=9;j++)
{
scanf("%d",&a[i][j]);
if(a[i][j])
{
h[i][a[i][j]]=1;
l[j][a[i][j]]=1;
g[(i-1)/3*3+(j+2)/3][a[i][j]]=1;
}
}
dfs(1,1);
return 0;
}
+1s...