Why does my Sukoku solver sometimes not work?
I have made a Sudoku solver. My code works for some cases:
245300000
080500903
030471000
520040310
310602097
098030024
000215080
109003070
000004135
but not in others:
046000900
030100000
020060085
000870000
600030004
000014000
790050030
000002040
002000610
My code (pastebin):
#include<stdio.h>
#include<math.h>
#include <time.h>
#include<stdlib.h>
int i,j;
int board[9][9];
int userboard[9][9];
void PRINTF();
void Drawspace(int n);
void Draw(int a,int b,int c);
void P(char *a)
{
printf("%s",a);
}
int check(int row,int col,int curNum)
{
int flag1=1,flag2=1,flag3=1;
for(i=0; i<9; i++)
if(board[row][i]==curNum)flag1=0;
for(i=0; i<9; i++)
if(board[i][col]==curNum)flag2=0;
row++;col++;
row=ceil(row/3.0);row--;row*=3;
col=ceil(col/3.0);col--;col*=3;
int tempcol=col;
for(i=1;i<=3;i++,col=tempcol,row++){
for(j=1;j<=3;j++){
if(board[row][col++]==curNum)flag3=0;
}
}
return (flag1 && flag2 && flag3);
}
int main()
{
FILE *fp;
char *p;
if((fp = fopen("s.txt","r"))==NULL)
{
P("Can Not Open File");
}
char ch;
char temparr[81];
int i=0,j;
int index=0;
srand (time(NULL));
int var = rand() % 10 ;
var=0;
printf("%d\n",var);
while(((ch=(fgetc(fp)))!=EOF))
{
if(ch=='\n')continue;
if(i>=var*81 && i<=(var*81+81))temparr[index++]=ch;
i++;
if(index==81)break;
}
fclose(fp);
temparr[index]='\0';
index=0;
//P(temparr);
int ZeroCount=0;
for(i=0; i<9; i++)
{
for( j=0; j<9; j++)
{
board[i][j]=(temparr[index]-48);
userboard[i][j]=(temparr[index]-48);
if(board[i][j]==0)ZeroCount++;
index++;
}
}
for( i=0; i<9; i++)
{
for( j=0; j<9; j++)
{
printf("%d",board[i][j]);
}
printf("\n");
}
//Backtrack
int Flag,flag;
for( Flag=1; ZeroCount && Flag;)
{
for( i=0; i<9; i++)
{
for(j=0; j<9; j++)
{
if(board[i][j]!=0)continue;
flag=0;
int curNum;
for(curNum=1; curNum<=9; curNum++)
{
if(check(i,j,curNum))
{
if(flag==0)flag=curNum;
else
{
flag=0;
break;
}
}
}
if(flag!=0)
{
board[i][j]=flag;
Flag=1;
ZeroCount--;
}
}
}
}
if(!Flag)P("Wrong Sudoku Board\n");
else
{
printf("\n\n\n");
for(i=0; i<9; i++)
{
for(j=0; j<9; j++)
{
printf("%d",board[i][j]);
}
printf("\n");
}
}
return 0;
}
What's my mistake?
No comments:
Post a Comment