题意:4*4的矩阵,完成数独
题解:小数据量,dfs+回溯,judge的时候自己画下图看下坐标就好了
代码
#include<stdio.h>
#include<string.h>
char a[100][100];
bool judge(int x, int y)
{
for(int i = 0; i < 4; i++)
{
if(a[x][i] == a[x][y] && i != y)
return false;
}
for(int i = 0; i < 4; i++)
{
if(a[i][y] == a[x][y] && i !=x)
return false;
}
int xx = x;
int yy = y;
if(x % 2)x--;
if(y % 2)y--;
for(int i = x; i <= x + 1; i++)
{
for(int j = y; j <= y + 1; j++)
{
if(a[i][j] == a[xx][yy] && i != xx && j != yy)
return false;
}
}
return true;
}
void dfs(int cur)
{
if(cur == 4 * 4)
{
for(int i = 0; i < 4; i++)
{
for(int j = 0; j < 4; j++)
{
printf("%c",a[i][j]);
}
printf("\n");
}
return;
}
int x = cur / 4;
int y = cur % 4;
if(a[x][y] == '*')
{
for(int i = 1; i <= 4;i++)
{
a[x][y] = i + '0';
if(judge(x, y))dfs(cur + 1);
a[x][y] = '*';
}
}
else dfs(cur + 1);
}
int main()
{
int T;
scanf("%d",&T);
for(int t = 1; t <= T; t++)
{
for(int i = 0; i < 4; i++)
scanf("%s", a[i]);
printf("Case #%d:\n", t);
dfs(0);
}
return 0;
}