蓝桥杯试题——独数游戏
测试样例:
005300000
800000020
070010500
400005300
010070006
003200080
060500009
004000030
000009700
样例结果:
145327698
839654127
672918543
496185372
218473956
753296481
367542819
984761235
521839764
代码:
#include<iostream>
#include<cstdio>
using namespace std;
char A[10][10];
int xy(int n, int I,int J)
{
for (int k = 0; k < 9; k++)
if (A[I][k] == n + '0'|| A[k][J] == n + '0') return 0;
return 1;
}
int z(int n, int a, int b)
{
for (int i = a * 3; i < a * 3 + 3; i++)
for (int j = b * 3; j < b * 3 + 3; j++)
if (A[i][j] == n + '0')
return 0;
return 1;
}
int f(int num)
{
if (num == 81)
return 1;
int i, j;
i = num / 9;
j = num % 9;
if (A[i][j] == '0') {
for (int k = 1; k <= 9; k++) {
if (xy(k, i, j) && z(k, i / 3, j / 3)) {
A[i][j] = k + '0';
if(f(num + 1)) return 1;
}
}
A[i][j] = '0';
}
else if(f(num + 1)) return 1;
return 0;
}
int main()
{
for (int i = 0; i < 9; i++){
for (int j = 0; j < 9; j++)
cin >> A[i][j];
}
f(0);
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++)
cout << A[i][j];
cout << endl;
}
return 0;
}