#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>using namespace STD;intmp[Ten][Ten],row[Ten][Ten],col[Ten][Ten],grid[Ten][Ten];intGetintXintY) {if(x>=1&&x<=3) {if(y>=1&&y<=3)return 1;Else if(y>=4&&y<=6)return 4;Else return 7; }Else if(4<=x&&x<=6) {if(y>=1&&y<=3)return 2;Else if(y>=4&&y<=6)return 5;Else return 8; }Else{if(y>=1&&y<=3)return 3;Else if(y>=4&&y<=6)return 6;Else return 9; }}intDfsintXintY) {if(x==Ten)return 1;intflag=0Iif(Mp[x][y]) {if(y==9) Flag=dfs (x+1,1);ElseFlag=dfs (x,y+1);if(flag)return 1;Else return 0; }Else{ for(i=1; i<=9; i++) {intK=get (x, y);if(!row[x][i]&&!col[y][i]&&!grid[k][i]) {row[x][i]=1; col[y][i]=1; grid[k][i]=1; Mp[x][y]=i;if(y==9) Flag=dfs (x+1,1);ElseFlag=dfs (x,y+1);if(flag==0) {row[x][i]=0; col[y][i]=0; grid[k][i]=0; mp[x][y]=0; }Else return 1; } } }return 0;}intMain () {intI,j,k,_;CharSscanf("%d", &_); while(_--) {memset(Row,0,sizeof(row));memset(Col,0,sizeof(col));memset(Grid,0,sizeof(grid)); for(i=1; i<=9; i++) for(j=1; j<=9; J + +) {Cin>>s; mp[i][j]=s-' 0 ';if(Mp[i][j]) {K=get (I,J); row[i][mp[i][j]]=1; col[j][mp[i][j]]=1; grid[k][mp[i][j]]=1; }} DFS (1,1); for(i=1; i<=9; i++) { for(j=1; j<=9; J + +) {printf("%d", Mp[i][j]); }printf("\ n"); } }return 0;}
Copyright NOTICE: This article for Bo Master original article, without Bo Master permission not reproduced.
POJ 2676 Sudoku