| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Re:1922ms的dfs,好险!!!In Reply To:Re:1922ms的dfs,好险!!! Posted by:lileiyang12 at 2011-04-15 15:00:59 1391MS
#include <cstdio>
using namespace std;
char sudoku[10][10];
bool judge(int i, int j, char v) {
for (int k = 0; k < 9; ++k) {
if (sudoku[k][j] == v) return false;
if (sudoku[i][k] == v) return false;
}
int ii = i / 3, jj = j / 3;
for (int _i = ii * 3; _i < ii * 3 + 3; ++_i) {
for (int _j = jj * 3; _j < jj * 3 + 3; ++_j) {
if (sudoku[_i][_j] == v)
return false;
}
}
return true;
}
bool dfs(int idx) {
if (idx == 81) {
for (int i = 0; i < 9; ++i)
printf("%s\n", sudoku[i]);
return true;
}
int r = idx / 9, c = idx % 9;
if (sudoku[r][c] != '0') return dfs(idx + 1);
for (int i = 1; i <= 9; ++i) {
if (judge(r, c, '0' + i)) {
sudoku[r][c] = (i + '0');
if (dfs(idx + 1)) return true;
sudoku[r][c] = '0';
}
}
return false;
}
int main() {
int n;
scanf ("%d", &n);
while (n--) {
for (int i = 0; i < 9; ++i)
scanf ("%s", sudoku[i]);
dfs(0);
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator