Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Sudoku Solver Problem

  1. Mar 30, 2017 #1
    • Member warned to post directly in the thread, and give indication of warnings and behavior of program
    I am attempting to create a Sudoku Solving Program in Java

    This is what I have to far

    https://pastebin.com/raw/tgnAGKb2

    I have spent close to an hour trying to debug it but to no avail

    Can someone more skilled than I please point me in the right direction?
     
  2. jcsd
  3. Mar 30, 2017 #2

    mfb

    User Avatar
    2016 Award

    Staff: Mentor

    What goes wrong where?
    At which step does the program state deviate from your expectations?
     
  4. Mar 30, 2017 #3
    It "solves" the Sudoku Board and outputs the solved board but there are repeats in the grids making the solution incorrect
     
  5. Mar 30, 2017 #4

    mfb

    User Avatar
    2016 Award

    Staff: Mentor

    Then you should check the function calls that incorrectly claim the assignment would be valid and see what goes wrong there.
     
  6. Mar 30, 2017 #5

    WWGD

    User Avatar
    Science Advisor
    Gold Member

    Why not stop it at different points if possible, i.e., run just the first, say 10 lines and see where, at what step, the problem arises?
     
  7. Mar 30, 2017 #6
    Yeah when I get the chance I might just try to debug it at every recursive call
    Might take forever but it may be my last hope
     
  8. Mar 30, 2017 #7

    WWGD

    User Avatar
    Science Advisor
    Gold Member

    Good luck, if you want help in the Math part, let us know ; unfortunately I am just a beginner programmer, tho others may be able to help you in that regard.
     
  9. Mar 30, 2017 #8

    ChrisVer

    User Avatar
    Gold Member

    Code (Java):

    for(int k = (row/3)*3; k < (row/3)*3+3; k++) {
               for(int l = (col/3)*3; l < (col/3)*3+3; l++) {
                   if(k != row && l != col) {
                       if(b[row][col] == number) return false;
                   }
               }
     
    are you sure about that b[row][col] there? if yes, why are you even iterating over k and l? Hopefully this will solve it?
    Also some additional stuff you can think about:
    1) you could try to fix some lines where you're using hardcoding (such as the line where you check whether your column or row are above the size of the sudoku board). That's the reason you introduced SIZE in your class, no?
    2) you could do use a continue statement within the for loops, since you have already checked the same rows and columns.. in other words, if you are in the top left corner [1]
    [1][2][3]
    [4][5][6]
    [7][8][9]
    when you reach the grid iteration you have:already check 2,3,4,7... you don't have to recheck them...
    if you are at [5], you have already checked 4,6,2,8... etc...
     
    Last edited: Mar 30, 2017
  10. Mar 31, 2017 #9
    Code (Text):
    //check grids//
            for(int k = (row/3)*3; k < (row/3)*3+3; k++) {
                for(int l = (col/3)*3; l < (col/3)*3+3; l++) {
                    if(k != row && l != col) {
                        if(b[row][col] == number) return false;
                    }
                }
     
    That && should be an ||. If either (k!= row ) or (l != col) than the (k,l) cell differs from the (row,column) cell and you want to check for a duplicate.
     
  11. Mar 31, 2017 #10
    That doesn't matter, because you already checked the columns and rows. The output I get now is:

    693857124
    124569387
    512473896
    346791258
    435928671
    278346519
    859214763
    781632945
    967185432

    The problem is clearly with, the 3x3 boxes, since rows and colums have unique numbers.

    .
     
  12. Mar 31, 2017 #11

    ChrisVer

    User Avatar
    Gold Member

    did you check your grid iteration?
     
  13. Mar 31, 2017 #12

    mfb

    User Avatar
    2016 Award

    Staff: Mentor

    This should check b[k][l] (the loop variables), not b[row][col] (which is the place we want to validate itself).
     
  14. Mar 31, 2017 #13
    Haha I knew I made some dumb mistake
    Thank you so much for finding that
    I switched b[row][col] with b[k][l] and the result looks fine now
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook

Have something to add?
Draft saved Draft deleted



Similar Discussions: Sudoku Solver Problem
  1. Sudoku generator (Replies: 3)

  2. Sudoku solver in c++ (Replies: 7)

  3. Sudoku Algorithm (Replies: 2)

  4. Sudoku Solver in C++ (Replies: 2)

  5. Sudoku in c# (Replies: 1)

Loading...