//union row,col into one number int VarUnion(int row, int col) { return (row*10)+col; } //dissassembly the number into row and col void DissAssembly(int *row, int *col, int var) { *row = var/10; *col = var%10; } Check(int row, int col) { int sRow = row, sCol = col, RetVal, bOk = 1; //up vertical while(sRow>=0) { if(sln[sRow][sCol]<0) { bOk = 0; break; } else sRow--; } if(bOk == 0) return 0; sRow = row; sCol = col; //down vertical while(sRow<=7) { if(sln[sRow][sCol]<0) { bOk = 0; break; } else sRow++; } if(bOk == 0) return 0; sRow = row; sCol = col; //right horizontal while(sCol<=7) { if(sln[sRow][sCol]<0) { bOk = 0; break; } else sCol++; } if(bOk == 0) return 0; sRow = row; sCol = col; //left horizontal while(sCol>=0) { if(sln[sRow][sCol]<0) { bOk = 0; break; } else sCol--; } if(bOk == 0) return 0; sRow = row; sCol = col; //up right diagonal while(sRow>=0 && sRow<=7 && sCol<=7) { if(sln[sRow][sCol]<0) { bOk = 0; break; } RetVal = VarUnion(sRow,sCol); RetVal -= 9; DissAssembly(&sRow,&sCol,RetVal); } if(bOk == 0) return 0; sRow = row; sCol = col; //up left diagonal while(sRow>=0 && sRow<=7 && sCol>=0 && sCol<=7) { if(sln[sRow][sCol]<0) { bOk = 0; break; } RetVal = VarUnion(sRow,sCol); RetVal -= 11; DissAssembly(&sRow,&sCol,RetVal); } if(bOk == 0) return 0; sRow = row; sCol = col; //down left diagonal while(sRow<=7 && sCol>=0 && sCol<=7) { if(sln[sRow][sCol]<0) { bOk = 0; break; } RetVal = VarUnion(sRow,sCol); RetVal += 9; DissAssembly(&sRow,&sCol,RetVal); } if(bOk == 0) return 0; sRow = row; sCol = col; //down right diagonal while(sRow<=7 && sCol<=7) { if(sln[sRow][sCol]<0) { bOk = 0; break; } RetVal = VarUnion(sRow,sCol); RetVal += 11; DissAssembly(&sRow,&sCol,RetVal); } if(bOk == 0) return 0; sln[row][col] = -1; return 1; }