/**
* hdu1426
* 遍历1-9
*/
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int mmax = 11;
int num;
int hh = 0;
int map[mmax][mmax];
struct queue
{
int x, y;
char a;
}q[mmax*mmax];
int dfs(int n)
{
if(n == num)
{
//这个我也不知道为何要加,╮(╯▽╰)╭哎
if(hh == 0)
hh = 1;
else
cout << endl;
for(int i = 1; i <= 9; i++)
{
// printf("%d", map[i][1]);
cout << map[i][1];
for(int j = 2; j <= 9; j++)
{
// printf(" %d", map[i][j]);
cout << " " << map[i][j];
}
// printf("\n");
cout << endl;
}
return -1;
}
int x = q[n].x;
int y = q[n].y;
for(int k = 1 ; k <= 9; k++)
{
int flag = 1;
for(int i = 1; i <= 9; i++)
{
if(map[i][y] == k)
{
flag = 0;
break;
}
if(map[x][i] == k)
{
flag = 0;
break;
}
}
for(int i = 0; i < 3; i++)
{
for(int j = 0; j < 3; j++)
{
if(map[(x-1)/3*3+i+1][(y-1)/3*3+j+1] == k)
{
flag = 0;
break;
}
}
}
if(flag)
{
map[x][y] = k;
int temp = dfs(n+1);
if(temp == -1)
{
return -1;
}
map[x][y] = 0;
}
}
return 0;
}
int main()
{
char s;
while(cin >> s)
{
num = 0;
for (int i = 1; i <= 9; i++)
{
for (int j = 1; j <= 9; j++)
{
if(!(i == 1&& j == 1))
cin >> s;
if (s == '?')
{
q[num].x = i;
q[num].y = j;
map[i][j] = 0;
num++;
}
else
{
map[i][j] = s - '0';
}
}
}
dfs(0);
}
return 0;
}
HDU 1426(PE多次)
最新推荐文章于 2021-01-28 20:10:06 发布