数独

题目传送门

解题思路

这题就是dfs搜索

AC代码

#include<cstdlib>
#include<cstdio>
using namespace std;
int a[10][10],b[10][10],c[10][10],ans[10][10];
int sum(int x,int y)
{
   
	return (x-1)/3*3+(y-1)/3+1;
}
void print()
{
   
	for(int i=1;i<=9;i++,printf("\n"))
	 for(int j=1;j<=9;j++)	
	  printf("%d ",ans[i][j]);
	exit(0);
}
void dfs(int x,int y)
{
   
	if(ans[x][y]!=0)if(x==9&&y==9)print();
		            else if(y==9)dfs(x+1,1);
				    else dfs(x,y+1);
	else for(int i=1;i<=9;i++)
	 	  if(!a[x][i]&&!b[y][i]&&!c[sum(x, y)][i]) 
		  {
   
			ans[x][y]=i;
			a[x][i]=b[y][i]=c[sum(x, y)][i]=1;
			if(x==9&&y==9)print();
			else if(y==9)dfs(x+1,1);
			else dfs(x,y+1);
			ans[x][y]=a[x][i]=b[y][i]=c[sum(x, y)][i]=0;
		  }
}
int main()
{
   
	for(int i=1;i<=9;i++)//输入
	 for(int j=1;j<=9;j++)
	 {
   
	 	int x;
		scanf("%d",&x);
		if(x!=0)ans[i][j]=x,a[i][x]=b[j][x]=c[sum(i, j)][x]=1;
	 }
	dfs(1,1);//dfs
	return 0;
}

谢谢