diff --git a/POJ/2676_tanhehe.cpp b/POJ/2676_tanhehe.cpp new file mode 100644 index 0000000..ddedde0 --- /dev/null +++ b/POJ/2676_tanhehe.cpp @@ -0,0 +1,66 @@ +#include +#include +#include +#include + +using namespace std; + +struct node { + int x, y; +}q[9*9+10]; + +bool row[10][10], col[10][10], sq[4][4][10]; +int G[10][10], cnt; + +bool dfs(int cn) { + if(cn < 0) return true; + + int x = q[cn].x, y = q[cn].y; + + for(int k=1; k<=9; k++) { + if(row[x][k] || col[y][k] || sq[x/3][y/3][k]) continue; + row[x][k] = col[y][k] = sq[x/3][y/3][k] = true; + + G[x][y] = k; + if(dfs(cn-1)) return true; + + row[x][k] = col[y][k] = sq[x/3][y/3][k] = false; + } + + return false; +} + + +int main() { + int T; + scanf("%d", &T); + + while(T--) { + cnt = 0; + memset(row, false, sizeof(row)); + memset(col, false, sizeof(col)); + memset(sq, false, sizeof(sq)); + + for(int i=0; i<9; i++) { + for(int j=0; j<9; j++) { + scanf("%1d", &G[i][j]); + int k = G[i][j]; + if(k != 0) { + row[i][k] = col[j][k] = sq[i/3][j/3][k] = true; + } + else q[cnt++] = (node){i, j}; + } + } + + dfs(cnt-1); + + for(int i=0; i<9; i++) { + for(int j=0; j<9; j++) { + printf("%d", G[i][j]); + } + putchar('\n'); + } + } + + return 0; +}