Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define N 10
- using pii=pair<int,int>;
- int ar[N][N];
- bool fill_line(int line,int num){
- for(int j=1;j<=9;j++)
- if(ar[line][j]==num) return false;
- return true;
- }
- bool fill_col(int col,int num){
- for(int i=1;i<=9;i++)
- if(ar[i][col]==num) return false;
- return true;
- }
- bool fill_square(int line,int col,int num){
- if(1<=line&&line<=3) line=1;
- else if(4<=line&&line<=6) line=4;
- else line=7;
- if(1<=col&&col<=3) col=1;
- else if(4<=col&&col<=6) col=4;
- else col=7;
- for(int i=line;i<=line+2;i++){
- for(int j=col;j<=col+2;j++){
- if(ar[i][j]==num) return false;
- }
- }
- return true;
- }
- pii find_zero(int ar[N][N]){
- for(int i=1;i<=9;i++){
- for(int j=1;j<=9;j++){
- if(ar[i][j]==0)
- return {i,j};
- }
- }
- return {-1,-1};
- }
- bool sudoku(int ar[N][N]){
- int line,col;
- line=find_zero(ar).first;
- col=find_zero(ar).second;
- if(line==-1&&col==-1) return true;
- for(int num=1;num<=9;num++){
- if( fill_line(line,num) && fill_col(col,num) && fill_square(line,col,num) ){
- ar[line][col]=num;
- if( sudoku(ar) ) return true;
- ar[line][col]=0;
- }
- }
- return false;
- }
- int main(){
- FILE *read,*write;
- read=fopen("input_sudoku.txt","r");
- write=fopen("sudoku_ans.txt","w");
- string str[10];
- int t=0;
- while(fscanf(read,"%[^\n]s",str)!=EOF){
- for(int i=1;i<=9;i++){
- for(int j=1;j<=9;j++){
- fscanf(read,"%d",&ar[i][j]);
- }
- }
- sudoku(ar);
- fprintf(write,"%s\n",str);
- for(int i=1;i<=9;i++){
- for(int j=1;j<=9;j++){
- fprintf(write,"%d ",ar[i][j]);
- }
- fprintf(write,"\n");
- }
- fscanf(read,"%[^\n]s",str);
- for(int i=1;i<=9;i++){
- for(int j=1;j<=9;j++){
- fscanf(read,"%d",&ar[i][j]);
- }
- }
- }
- fclose(read);
- fclose(write);
- return 0;
- }
Add Comment
Please, Sign In to add comment