what i understood from your problem is, when the configuration is
given by user, it can be directly stored into matrix[][] array. that
will solve your problem in o(n^2), where n=9.

On Sun, May 29, 2011 at 5:50 PM, Dumanshu <duman...@gmail.com> wrote:
> I think ur verification function is correct but it works only if user
> is entering the values one by one. as soon as he enters a duplicate
> value it will show a error. It will work for the case of ur solver as
> ur code itself is generating the values.
> But here in this verification problem u r given a configuration from a
> user.  i.e. all values at once not one by one.
>
> So one thing that can be done is use ur fillbitmap function and then
> check if any of the 9 Least significant bits of the 27 values in ur
> bmp array is not set. If thats the case then sukoku isn't correct.
> but then this code would take O(n^2) = (3*n*n) time here n is 9.
>
> On May 29, 5:10 pm, Dumanshu <duman...@gmail.com> wrote:
>> no... what i mean to say is you have filled the bitmap in the process
>> of solving the grid. The way you are  filling the bitmap is -> you are
>> taking values from the matrix and placing them in the bitmaps using bi
>> bj bk.
>>
>> now in the verification you are checking the same matrix value against
>> the same bitmap field. it will "always" evaluate out to be false for
>> your if.
>> your if statement is checking whether the matrix value and the bitmap
>> value is same or not. you have used the matrix value to fill the
>> bitmap so obviously they will be same.
>>
>> see in fill bitmap funciton u did for some i,j ->
>>
>>  bmp[bi] |= 1 << matrix[i][j];
>>                                 bmp[bj] |= 1 << matrix[i][j];
>>                                 bmp[bk] |= 1 << matrix[i][j];
>> that is for some particular i,j say 5,4
>> u took value matrix[5][4] =8 and set the bit in bitmap after
>> calculating bi,bj,bk - these values are bi ==5, bj== 13 and bk == 10
>> so now in bmp[5], bmp[10] and bmp[13] u have set the 8th bit.
>>
>> now in verify function
>>
>>   if ((((bitmap[bi] >> matrix[i][j]) & 0x1) == 0x0) &&
>>                                         (((bitmap[bj] >> matrix[i][j])
>> & 0x1) == 0x0) &&
>>                                         (((bitmap[bk] >> matrix[i][j])
>> & 0x1) == 0x0)) {
>>                                 bitmap[bi] |= 1 << matrix[i][j];
>>                                 bitmap[bj] |= 1 << matrix[i][j];
>>                                 bitmap[bk] |= 1 << matrix[i][j];
>>
>> here during the loop when i==5 and j==4, the if condition will always
>> evaluate to false.
>>
>> same thing will happen for every value in the matrix because the
>> corresponding bit has been set earlier.
>>
>> so how is ur verification function working???
>>
>> On May 29, 3:35 pm, Vishal Thanki <vishaltha...@gmail.com> wrote:
>>
>>
>>
>>
>>
>>
>>
>> > yes, you are right. bitmap will be filled in the process of solving
>> > the grid. in verify routine, if the expression evaluates to false, it
>> > mean an element is encountered which is already present in row, col
>> > and 3x3 cube. this way you an tell that the solution is wrong.
>>
>> > hope that helps.
>>
>> > On Sun, May 29, 2011 at 2:01 PM, Dumanshu <duman...@gmail.com> wrote:
>> > > here in this part
>> > > if ((((bitmap[bi] >> matrix[i][j]) & 0x1) == 0x0) &&
>> > >                    (((bitmap[bj] >> matrix[i][j]) & 0x1) == 0x0) &&
>> > >                                        (((bitmap[bk] >> matrix[i][j])
>> > > & 0x1) == 0x0)) {
>> > >                                bitmap[bi] |= 1 << matrix[i][j];
>> > >                                bitmap[bj] |= 1 << matrix[i][j];
>> > >                                bitmap[bk] |= 1 << matrix[i][j];
>>
>> > > I think you are checking the same values which u have already set in
>> > > the bitmap using the fill_bitmap function. like suppose the 1st cell
>> > > of the matrix has value 5. then using fill bitmap u have the set
>> > > corresponding 5th bit in all 3 places(row col 3by3 cell) using bi bj
>> > > and bk.
>> > > now in the verify function u checking the same bit against that matrix
>> > > value which u have already set. so everytime ur if statement will
>> > > evaluate to false.
>>
>> > > I may be wrong... plz help.
>>
>> > > On May 28, 9:15 pm, Vishal Thanki <vishaltha...@gmail.com> wrote:
>> > >> here is the code..
>>
>> > >> #define bi  (i)
>> > >> #define bj  (GRID_SIZE+j)
>> > >> #define bk  (int)((GRID_SIZE*2)+(glb_sqrt*(i/glb_sqrt)+(j/glb_sqrt)))
>>
>> > >> /*glb_sqrt should be the square root of grid_size (i.e. 3 if its a 9x9
>> > >> sudoku). */
>>
>> > >> /* #define bk  (int)((GRID_SIZE*2)+(5*(i/5)+(j/5))) */
>>
>> > >> /*
>> > >>  * This function will verify solved grid. It will start with each 
>> > >> element
>> > >>  * in grid and update the bitmap step by step. As soon as it encounters 
>> > >> an
>> > >>  * element which is already present in bitmap, it will return error.
>> > >>  *
>> > >>  */
>>
>> > >> int verify()
>> > >> {
>> > >>         int i, j, k;
>> > >>         int bitmap[GRID_SIZE*3] = {0};
>> > >>         int bmp_idx;
>> > >>         for (i = 0; i < GRID_SIZE; i++) {
>> > >>                 for (j = 0; j < GRID_SIZE; j++) {
>> > >>                         if ((((bitmap[bi] >> matrix[i][j]) & 0x1) == 
>> > >> 0x0) &&
>> > >>                                         (((bitmap[bj] >> matrix[i][j]) 
>> > >> & 0x1) == 0x0) &&
>> > >>                                         (((bitmap[bk] >> matrix[i][j]) 
>> > >> & 0x1) == 0x0)) {
>> > >>                                 bitmap[bi] |= 1 << matrix[i][j];
>> > >>                                 bitmap[bj] |= 1 << matrix[i][j];
>> > >>                                 bitmap[bk] |= 1 << matrix[i][j];
>> > >>                         } else {
>> > >>                                 printf("Sudoku Error: i = %d, j = 
>> > >> %d\n", i, j);
>> > >>                                 return -1;
>> > >>                         }
>>
>> > >>                 }
>> > >>         }
>> > >>         return 0;
>>
>> > >> }
>> > >> On Sat, May 28, 2011 at 11:53 AM, Dumanshu <duman...@gmail.com> wrote:
>> > >> > Given a n by n matrix. Suggest an algorithm to verify its correctness
>> > >> > given a configuration. User can enter numbers only between 1 to n.
>> > >> > I need this in 2 ways -
>> > >> > 1. for the n by n matrix, suggest an elegant way for validating it.
>> > >> > 2. suggest a data structure for this sudoku so that the structure aids
>> > >> > in its verification.
>>
>> > >> > thnx for the help.
>>
>> > >> > --
>> > >> > You received this message because you are subscribed to the Google 
>> > >> > Groups "Algorithm Geeks" group.
>> > >> > To post to this group, send email to algogeeks@googlegroups.com.
>> > >> > To unsubscribe from this group, send email to 
>> > >> > algogeeks+unsubscr...@googlegroups.com.
>> > >> > For more options, visit this group 
>> > >> > athttp://groups.google.com/group/algogeeks?hl=en.
>>
>> > > --
>> > > You received this message because you are subscribed to the Google 
>> > > Groups "Algorithm Geeks" group.
>> > > To post to this group, send email to algogeeks@googlegroups.com.
>> > > To unsubscribe from this group, send email to 
>> > > algogeeks+unsubscr...@googlegroups.com.
>> > > For more options, visit this group 
>> > > athttp://groups.google.com/group/algogeeks?hl=en.
>
> --
> You received this message because you are subscribed to the Google Groups 
> "Algorithm Geeks" group.
> To post to this group, send email to algogeeks@googlegroups.com.
> To unsubscribe from this group, send email to 
> algogeeks+unsubscr...@googlegroups.com.
> For more options, visit this group at 
> http://groups.google.com/group/algogeeks?hl=en.
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Algorithm Geeks" group.
To post to this group, send email to algogeeks@googlegroups.com.
To unsubscribe from this group, send email to 
algogeeks+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/algogeeks?hl=en.

Reply via email to