Thread: help with sudoku solver

  1. #1
    Registered User
    Join Date
    Jan 2012
    Posts
    6

    help with sudoku solver

    so i've been working on this sudoku solver, but when i run it, sometimes on the solution, it has moved things around or not completely filled out the board



    Code:
    #include <stdio.h>
    #include <stdlib.h>
    
    
    
    
    
    
    
    
    void draw_board(void);
    
    
    void entered_board();
    
    
    void enter_board();
    
    
    
    
    int outputArray[9][9];
    int sudoku [9][9];
    char *str_blank_board [201] = {"A", "B","C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "A1", "B1", "C1", "D1", "E1", "F1", "G1", "H1", "I1", "J1", "K1", "L1", "M1", "N1", "O1", "P1", "Q1", "R1", "S1", "T1", "U1", "V1", "W1", "X1", "Y1", "Z1", "A2", "B2", "C2", "D2", "E2", "F2", "G2", "H2", "I2", "J2", "K2", "L2", "M2", "N2", "O2", "P2", "Q2", "R2", "S2", "T2", "U2", "V2", "W2", "X2", "Y2", "Z2", "A3", "B3", "C3"};
    int ipos;
    int jpos;
    int value;
    
    
    int input_value(int ipos,int jpos,int value)
    {
        int k = 0;
        int i;
        int j;
    
    
    
    
    for(k=0;k<9;k++)
    {
        if(outputArray[k][jpos]==value||outputArray[ipos][k]==value)
        {
           return 0;
        }
    
    
    }
    
    
    int istart=(ipos/3)*3;
    int jstart=(jpos/3)*3;
    
    
    for( i=istart;i<istart+3;i++)
    for( j=jstart;j<jstart+3;j++)
    if(outputArray[i][j]==value)
    return 0;
    
    
    return value;
    }
    
    
    int backtrack(int x, int y) {
     int temp,i,j;
     if (outputArray[x][y] == 0) {
      for (i = 1; i < 10; i++) {
       temp = input_value(x,y,i);
       if (temp > 0) {
        outputArray[x][y] = temp;
            if (x == 8 && y == 8) {
              return 1;
            } else if (x == 8) {
              if (backtrack(0,y+1)) return 1;
            } else {
              if (backtrack(x+1,y)) return 1 ;
            }
          }
        }
      if (i == 10) {
          if (outputArray[x][y] !=  sudoku[x][y]) outputArray[x][y] = 0;
       return 0;
        }
     } else {
      if (x == 8 && y == 8) {
       return 1;
      } else if (x == 8) {    if (backtrack(0,y+1)) return 1;
      } else {
       if (backtrack(x+1,y)) return 1;
        }
        return 0;
     }
    }
    
    
    
    
    
    
    int main(void)
    {
        int i;
        int j;
        char correct = '\0';
        int board_space = 0;
        int board_space_A1C3 = 0;
        int sudoku_space = 0;
        int sudoku_space_R = 0;
    
    
        int sudoku_protect[9][9];
        char blank_board [81];
    
    
    
    
        printf("this program will solve any sudoku puzzle you enter\n\n");
        printf("here is the board...\n\n\n");
    
    
        draw_board();
    
    
        enter_board();
    
    
        printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
    
    
        printf("here is the board you entered\n\n");
    
    
    
    
        entered_board(sudoku);
    
    
    do{//loop to see if board is right
        printf("is this board correct?\n");
        printf("y/n\n");
    do
       {
           scanf("%c", & correct);
    
    
       }while (correct == '\n');
    
    
    
    
    
    
       switch (correct)
       {
           case 'n':
           {
               printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");//clear screen
               printf("well then, let's begin the entering process again\n\n\n");
    
    
               draw_board();//put board on screen
    
    
               enter_board();//get input values
    
    
    
    
         printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
    
    
         printf("here is the board you entered\n\n");
    
    
         entered_board(sudoku);
            break;
           }
    
    
           case 'N':
           {
               printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");//clear screen
               printf("well then, let's begin the entering process again\n\n\n");
    
    
               draw_board();//put board on screen
    
    
               enter_board();//get input values
    
    
    
    
         printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
    
    
         printf("here is the board you entered\n\n");
    
    
         entered_board(sudoku);
            break;
           }
    
    
           case 'y':
           {
               printf("\n\n");
               printf("good, lets continue\n");
               break;
           }
    
    
           case 'Y':
           {
               printf("\n\n");
               printf("good, lets continue\n");
               break;
           }
    
    
            default:
            {
                printf("please enter 'y' or 'n'\n\n");
                break;
            }
            }//END SWITCH
    
    
    
    
       }while ((correct == 'n') || (correct == 'N') || (correct =! 'y') || (correct =! 'Y'));//end do loop
    
    
       printf("OK! its time to get serious!!!!!\n");
       printf("");
    
    
    for (i = 0; i < 9; i++) {//transfer values of sudoku to output array
      for (j = 0; j < 9; j++) {
       outputArray[i][j] = sudoku[i][j];
        }
     }
    
    
    if (backtrack(0,0)) {
      printf("Soln is :\n");//prints solution
      for (i = 0; i < 9; i++) {
       for (j = 0; j < 9; j++) {
        printf("%d ", outputArray[i][j]);
          }
       printf("\n");
        }
     } else{
      printf("I don't know what you did, but there is no solution, sorry...\n");
     }
    ;
    return 0;
    }
    
    
    
    
    
    
    void draw_board (void)
    {
        printf("A   B   C       D    E   F       G   H   I\n");
        printf("J   K   L       M    N   O       P   Q   R\n");
        printf("S   T   U       V    W   X       Y   Z   A1\n\n");
    
    
        printf("B1  C1  D1      E1   F1  G1      H1  I1  J1\n");
        printf("K1  L1  M1      N1   O1  P1      Q1  R1  S1\n");
        printf("T1  U1  V1      W1   X1  Y1      Z1  A2  B2\n\n");
    
    
        printf("C2  D2  E2      F2   G2  H2      I2  J2  K2\n");
        printf("L2  M2  N2      O2   P2  Q2      R2  S2  T2\n");
        printf("U2  V2  W2      X2   Y2  Z2      A3  B3  C3\n\n");
    
    
        printf("please enter the numbers on your board to their corresponding location\non the board on the screen. If no value enter a zero (0)\n\n");
    
    
        return;
    }
    
    
    void entered_board()
    {
    int sudoku_endl = 0;
    int sudoku_space_void = 1;
    
    
    for(sudoku_space_void = 1; sudoku_space_void<=9; sudoku_space_void++)
    {
        printf("%d", sudoku[sudoku_space_void][1]);
        printf("  %d", sudoku[sudoku_space_void][2]);
        printf("  %d", sudoku[sudoku_space_void][3]);
    
    
        printf("     %d", sudoku[sudoku_space_void][4]);
        printf("  %d", sudoku[sudoku_space_void][5]);
        printf("  %d", sudoku[sudoku_space_void][6]);
    
    
        printf("     %d", sudoku[sudoku_space_void][7]);
        printf("  %d", sudoku[sudoku_space_void][8]);
        printf("  %d\n", sudoku[sudoku_space_void][9]);
    
    
        sudoku_endl = sudoku_endl + 9;
    
    
        if ((sudoku_endl == 27) || (sudoku_endl == 54) || (sudoku_endl == 81))
        {
            printf("\n");
        }//end if
    
    
    }//end for loop
    
    
        return;
    }
    
    
    
    
    void enter_board()
    {
        int sudoku_space = 0;
        int sudoku_space_R = 0;
        int board_space = 0;
    
    
        for (sudoku_space = 1; sudoku_space <=9; sudoku_space++)//get values for the first time
        {
            for (sudoku_space_R = 1; sudoku_space_R<=9; sudoku_space_R++)
    
    
            {
                 printf("what is the value of %s?\n", str_blank_board [board_space]);
    
    
    
    
                 scanf("%d", & sudoku[sudoku_space][sudoku_space_R]);
    
    
                 do{
                        if ((sudoku[sudoku_space][sudoku_space_R]>9) ||(sudoku[sudoku_space][sudoku_space_R]<0))//checks if value is invalid
                        {
                        printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
                        printf("you entered an invalid number\n");
                        printf("please try again\n\n");
                        draw_board();
                        printf("what is the value of %s?\n", str_blank_board[board_space]);//re-print space where vlaue will be inputted
                        scanf("%d", & sudoku[sudoku_space][sudoku_space_R]);//re-enter value
                        }
    
    
                    }while((sudoku[sudoku_space][sudoku_space_R]>9) ||(sudoku[sudoku_space][sudoku_space_R]<0));
    
    
                printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
                draw_board();
                board_space++;
    
    
            }//end inner for loop
    
    
    
    
        }//end outer for loop
    }

  2. #2
    Just a pushpin. bernt's Avatar
    Join Date
    May 2009
    Posts
    426
    Code:
    int outputArray[9][9];
    int sudoku [9][9];
    
    ...
    
    for(sudoku_space_void = 1; sudoku_space_void<=9; sudoku_space_void++)
    
    ...
    
    for (sudoku_space = 1; sudoku_space <=9; sudoku_space++)
    for (sudoku_space_R = 1; sudoku_space_R<=9; sudoku_space_R++)
    Remember that array indices go from 0 to n-1.
    Consider this post signed

  3. #3
    Registered User
    Join Date
    Jan 2012
    Posts
    6
    yeah, but i have a [9][9] array so there are 10 rows and 10 columns (1 more than i need) so i start at 1 instead of zero to correct this problem. i tried and [8][8] array but for somereason that messed up my entered_board () function

  4. #4
    Just a pushpin. bernt's Avatar
    Join Date
    May 2009
    Posts
    426
    A [9][9] array has 9 rows and 9 columns numbered 0 through 8.

    Also backtrack() and the last part of main() use indices 0 to 8, so whatever you end up doing it needs to be consistent throughout the program.
    Consider this post signed

  5. #5
    Registered User
    Join Date
    Jan 2012
    Posts
    6
    ok! so now i've made some changes, but i still face the problem of the board not being solved completely. my thought is to add a do while loop somewhere that runs until all spaces don't equal zero. cause so far the parts it has been filling in are correct. i just need to know where. i've tried some places but haven't gotten it right.

    Code:
    #include <stdio.h>
    #include <stdlib.h>
    
    
    
    
    
    
    
    
    void draw_board(void);
    
    
    void entered_board();
    
    
    void enter_board();
    
    
    
    
    int outputArray[9][9];
    int sudoku [9][9];
    char *str_blank_board [201] = {"A", "B","C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "A1", "B1", "C1", "D1", "E1", "F1", "G1", "H1", "I1", "J1", "K1", "L1", "M1", "N1", "O1", "P1", "Q1", "R1", "S1", "T1", "U1", "V1", "W1", "X1", "Y1", "Z1", "A2", "B2", "C2", "D2", "E2", "F2", "G2", "H2", "I2", "J2", "K2", "L2", "M2", "N2", "O2", "P2", "Q2", "R2", "S2", "T2", "U2", "V2", "W2", "X2", "Y2", "Z2", "A3", "B3", "C3"};
    
    
    
    
    int input_value(int x, int y, int value){
     int i,j;
      for (i = 0; i < 9; i++) {
      if (value == outputArray[i][y] || value == outputArray[x][i]) {
    
    
       return 0;
        }
     }
     // Scan its own square
     if (x < 3) {
      if (y < 3) {
       for (i = 0; i < 3; i++) {
        for (j = 0; j < 3; j++) {
         if (value == outputArray[i][j]) {
    
    
                return 0;
              }
            }
          }
      } else if (y < 6) {
       for (i = 0; i < 3; i++) {
        for (j = 3; j < 6; j++) {
         if (value == outputArray[i][j]) {
                return 0;           }
            }
          }
      } else {
       for (i = 0; i < 3; i++) {
        for (j = 6; j < 9; j++) {
         if (value == outputArray[i][j]) {
                return 0;
              }
            }
          }
        }
     } else if (x < 6) {
      if (y < 3) {
       for (i = 3; i < 6; i++) {
        for (j = 0; j < 3; j++) {
         if (value == outputArray[i][j]) {
                return 0;
              }
            }
          }
      } else if (y < 6) {
       for (i = 3; i < 6; i++) {
        for (j = 3; j < 6; j++) {
         if (value == outputArray[i][j]) {
                return 0;
              }
            }
          }
      } else {    for (i = 3; i < 6; i++) {
        for (j = 6; j < 9; j++) {
         if (value == outputArray[i][j]) {
                return 0;
              }
            }
          }
        }
     } else {
      if (y < 3) {
       for (i = 6; i < 9; i++) {
        for (j = 0; j < 3; j++) {
         if (value == outputArray[i][j]) {
                return 0;
              }
            }
          }
      } else if (y < 6) {
       for (i = 6; i < 9; i++) {
        for (j = 3; j < 6; j++) {
         if (value == outputArray[i][j]) {
                return 0;
              }
            }
          }
      } else {
       for (i = 6; i < 9; i++) {
        for (j = 6; j < 9; j++) {
         if (value == outputArray[i][j]) {
                return 0;
              }         }
          }
        }
     }
     return value;
    }
    
    
    int backtrack(int x, int y) {
     int temp,i,j;
     if (outputArray[x][y] == 0) {
      for (i = 1; i < 10; i++) {
       temp = input_value(x,y,i);
       if (temp > 0) {
        outputArray[x][y] = temp;
            if (x == 8 && y == 8) {
              return 1;
            } else if (x == 8) {
              if (backtrack(0,y+1)) return 1;
            } else {
              if (backtrack(x+1,y)) return 1 ;
            }
          }
        }
      if (i == 10) {
          if (outputArray[x][y] !=  sudoku[x][y]) outputArray[x][y] = 0;
       return 0;
        }
     } else {
      if (x == 8 && y == 8) {
       return 1;
      } else if (x == 8) {    if (backtrack(0,y+1)) return 1;
      } else {
       if (backtrack(x+1,y)) return 1;
        }
     }
    
    
    }
    
    
    
    
    
    
    int main(void)
    {
        int i;
        int j;
        char correct = '\0';
        int board_space = 0;
        int board_space_A1C3 = 0;
        int sudoku_space = 0;
        int sudoku_space_R = 0;
    
    
        int sudoku_protect[9][9];
        char blank_board [81];
    
    
    
    
        printf("this program will solve any sudoku puzzle you enter\n\n");
        printf("here is the board...\n\n\n");
    
    
        draw_board();
    
    
        enter_board();
    
    
        printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
    
    
        printf("here is the board you entered\n\n");
        printf("sudoku [8][8] %d\n\n", sudoku[8][8]);
        printf("sudoku [8][7] %d\n\n", sudoku[8][7]);
        printf("sudoku [7][8] %d\n\n", sudoku[7][8]);
    
    
        entered_board(sudoku);
    
    
    do{//loop to see if board is right
        printf("is this board correct?\n");
        printf("y/n\n");
    do
       {
           scanf("%c", & correct);
    
    
       }while (correct == '\n');
    
    
    
    
    
    
       switch (correct)
       {
           case 'n':
           {
               printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");//clear screen
               printf("well then, let's begin the entering process again\n\n\n");
    
    
               draw_board();//put board on screen
    
    
               enter_board();//get input values
    
    
    
    
         printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
    
    
         printf("here is the board you entered\n\n");
    
    
         entered_board(sudoku);
            break;
           }
    
    
           case 'N':
           {
               printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");//clear screen
               printf("well then, let's begin the entering process again\n\n\n");
    
    
               draw_board();//put board on screen
    
    
               enter_board();//get input values
    
    
    
    
         printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
    
    
         printf("here is the board you entered\n\n");
    
    
         entered_board(sudoku);
            break;
           }
    
    
           case 'y':
           {
               printf("\n\n");
               printf("good, lets continue\n");
               break;
           }
    
    
           case 'Y':
           {
               printf("\n\n");
               printf("good, lets continue\n");
               break;
           }
    
    
            default:
            {
                printf("please enter 'y' or 'n'\n\n");
                break;
            }
            }//END SWITCH
    
    
    
    
       }while ((correct == 'n') || (correct == 'N') || (correct =! 'y') || (correct =! 'Y'));//end do loop
    
    
       printf("OK! its time to get serious!!!!!\n");
       printf("");
    
    
    for (i = 0; i < 9; i++) {//transfer values of sudoku to output array
      for (j = 0; j < 9; j++) {
       outputArray[i][j] = sudoku[i][j];
        }
     }
    
    
    if (backtrack(0,0)) {
      printf("Soln is :\n");//prints solution
      for (i = 0; i < 9; i++) {
       for (j = 0; j < 9; j++) {
        printf("%d ", outputArray[i][j]);
          }
       printf("\n");
        }
     } else{
      printf("I don't know what you did, but there is no solution, sorry...\n");
     }
    
    
    printf("%d", sudoku[2][3]);
    return 0;
    }
    
    
    
    
    
    
    void draw_board (void)
    {
        printf("A   B   C       D    E   F       G   H   I\n");
        printf("J   K   L       M    N   O       P   Q   R\n");
        printf("S   T   U       V    W   X       Y   Z   A1\n\n");
    
    
        printf("B1  C1  D1      E1   F1  G1      H1  I1  J1\n");
        printf("K1  L1  M1      N1   O1  P1      Q1  R1  S1\n");
        printf("T1  U1  V1      W1   X1  Y1      Z1  A2  B2\n\n");
    
    
        printf("C2  D2  E2      F2   G2  H2      I2  J2  K2\n");
        printf("L2  M2  N2      O2   P2  Q2      R2  S2  T2\n");
        printf("U2  V2  W2      X2   Y2  Z2      A3  B3  C3\n\n");
    
    
        printf("please enter the numbers on your board to their corresponding location\non the board on the screen. If no value enter a zero (0)\n\n");
    
    
        return;
    }
    
    
    void entered_board()
    {
    int sudoku_endl = 0;
    int sudoku_space_void = 0;
    
    
    for(sudoku_space_void = 0; sudoku_space_void<=8; sudoku_space_void++)
    {
        printf("%d", sudoku[sudoku_space_void][0]);
        printf("  %d", sudoku[sudoku_space_void][1]);
        printf("  %d", sudoku[sudoku_space_void][2]);
    
    
        printf("     %d", sudoku[sudoku_space_void][3]);
        printf("  %d", sudoku[sudoku_space_void][4]);
        printf("  %d", sudoku[sudoku_space_void][5]);
    
    
        printf("     %d", sudoku[sudoku_space_void][6]);
        printf("  %d", sudoku[sudoku_space_void][7]);
        printf("  %d\n", sudoku[sudoku_space_void][8]);
    
    
        sudoku_endl = sudoku_endl + 9;
    
    
        if ((sudoku_endl == 27) || (sudoku_endl == 54) || (sudoku_endl == 81))
        {
            printf("\n");
        }//end if
    
    
    }//end for loop
    
    
        return;
    }
    
    
    void enter_board()
    {
        int sudoku_space = 0;
        int board_space = 0;
    
    
        for (sudoku_space = 0; sudoku_space <=8; sudoku_space++)//get values for the first time
        {
        printf("what is the value of %s?\n", str_blank_board [board_space]);
    
    
        scanf("%d", & sudoku[sudoku_space][0]);
    
    
        do{
                if ((sudoku[sudoku_space][0]>9) ||(sudoku[sudoku_space][0]<0))//checks if value is invalid
                {
                        printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
                        printf("you entered an invalid number\n");
                        printf("please try again\n\n");
                        draw_board();
                        printf("what is the value of %s?\n", str_blank_board[board_space]);//re-print space where vlaue will be inputted
                        scanf("%d", & sudoku[sudoku_space][0]);//re-enter value
                }
    
    
            }while((sudoku[sudoku_space][0]>9) ||(sudoku[sudoku_space][0]<0));
                board_space++;
        printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
        draw_board();
    
    
        ///////////////////////////////////////////////////////////////////////////////////////////////////////
    
    
        printf("what is the value of %s?\n", str_blank_board [board_space]);
    
    
        scanf("%d", & sudoku[sudoku_space][1]);
    
    
        do{
                if ((sudoku[sudoku_space][1]>9) ||(sudoku[sudoku_space][1]<0))//checks if value is invalid
                {
                        printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
                        printf("you entered an invalid number\n");
                        printf("please try again\n\n");
                        draw_board();
                        printf("what is the value of %s?\n", str_blank_board[board_space]);//re-print space where vlaue will be inputted
                        scanf("%d", & sudoku[sudoku_space][1]);//re-enter value
                }
    
    
            }while((sudoku[sudoku_space][1]>9) ||(sudoku[sudoku_space][1]<0));
                board_space++;
        printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
        draw_board();
    
    
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    
    
        printf("what is the value of %s?\n", str_blank_board [board_space]);
    
    
        scanf("%d", & sudoku[sudoku_space][2]);
    
    
        do{
                if ((sudoku[sudoku_space][2]>9) ||(sudoku[sudoku_space][2]<0))//checks if value is invalid
                {
                        printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
                        printf("you entered an invalid number\n");
                        printf("please try again\n\n");
                        draw_board();
                        printf("what is the value of %s?\n", str_blank_board[board_space]);//re-print space where vlaue will be inputted
                        scanf("%d", & sudoku[sudoku_space][2]);//enter value
                }
    
    
            }while((sudoku[sudoku_space][2]>9) ||(sudoku[sudoku_space][2]<0));
                board_space++;
        printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
        draw_board();
    
    
        ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    
    
        printf("what is the value of %s?\n", str_blank_board [board_space]);
    
    
        scanf("%d", & sudoku[sudoku_space][3]);
    
    
        do{
                if ((sudoku[sudoku_space][3]>9) ||(sudoku[sudoku_space][3]<0))//checks if value is invalid
                {
                        printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
                        printf("you entered an invalid number\n");
                        printf("please try again\n\n");
                        draw_board();
                        printf("what is the value of %s?\n", str_blank_board[board_space]);//re-print space where vlaue will be inputted
                        scanf("%d", & sudoku[sudoku_space][3]);//re-enter value
                }
    
    
            }while((sudoku[sudoku_space][3]>9) ||(sudoku[sudoku_space][3]<0));
                board_space++;
        printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
        draw_board();
    
    
        /////////////////////////////////////////////////////////////////////////////////////////////////////////////
    
    
        printf("what is the value of %s?\n", str_blank_board [board_space]);
    
    
        scanf("%d", & sudoku[sudoku_space][4]);
    
    
        do{
                if ((sudoku[sudoku_space][4]>9) ||(sudoku[sudoku_space][4]<0))//checks if value is invalid
                {
                        printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
                        printf("you entered an invalid number\n");
                        printf("please try again\n\n");
                        draw_board();
                        printf("what is the value of %s?\n", str_blank_board[board_space]);//re-print space where vlaue will be inputted
                        scanf("%d", & sudoku[sudoku_space][4]);//re-enter value
                }
    
    
            }while((sudoku[sudoku_space][4]>9) ||(sudoku[sudoku_space][4]<0));
                board_space++;
        printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
        draw_board();
    
    
        /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    
    
        printf("what is the value of %s?\n", str_blank_board [board_space]);
    
    
        scanf("%d", & sudoku[sudoku_space][5]);
    
    
        do{
                if ((sudoku[sudoku_space][5]>9) ||(sudoku[sudoku_space][5]<0))//checks if value is invalid
                {
                        printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
                        printf("you entered an invalid number\n");
                        printf("please try again\n\n");
                        draw_board();
                        printf("what is the value of %s?\n", str_blank_board[board_space]);//re-print space where vlaue will be inputted
                        scanf("%d", & sudoku[sudoku_space][5]);//re-enter value
                }
    
    
            }while((sudoku[sudoku_space][5]>9) ||(sudoku[sudoku_space][5]<0));
                board_space++;
        printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
        draw_board();
    
    
        ////////////////////////////////////////////////////////////////////////////////////////////
    
    
        printf("what is the value of %s?\n", str_blank_board [board_space]);
    
    
        scanf("%d", & sudoku[sudoku_space][6]);
    
    
        do{
                if ((sudoku[sudoku_space][6]>9) ||(sudoku[sudoku_space][6]<0))//checks if value is invalid
                {
                        printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
                        printf("you entered an invalid number\n");
                        printf("please try again\n\n");
                        draw_board();
                        printf("what is the value of %s?\n", str_blank_board[board_space]);//re-print space where vlaue will be inputted
                        scanf("%d", & sudoku[sudoku_space][6]);//re-enter value
                }
    
    
            }while((sudoku[sudoku_space][6]>9) ||(sudoku[sudoku_space][6]<0));
                board_space++;
        printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
        draw_board();
    
    
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    
    
        printf("what is the value of %s?\n", str_blank_board [board_space]);
    
    
        scanf("%d", & sudoku[sudoku_space][7]);
    
    
        do{
                if ((sudoku[sudoku_space][7]>9) ||(sudoku[sudoku_space][7]<0))//checks if value is invalid
                {
                        printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
                        printf("you entered an invalid number\n");
                        printf("please try again\n\n");
                        draw_board();
                        printf("what is the value of %s?\n", str_blank_board[board_space]);//re-print space where vlaue will be inputted
                        scanf("%d", & sudoku[sudoku_space][7]);//re-enter value
                }
    
    
            }while((sudoku[sudoku_space][7]>9) ||(sudoku[sudoku_space][7]<0));
                board_space++;
        printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
        draw_board();
    
    
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    
    
        printf("what is the value of %s?\n", str_blank_board [board_space]);
    
    
        scanf("%d", & sudoku[sudoku_space][8]);
    
    
        do{
                if ((sudoku[sudoku_space][8]>9) ||(sudoku[sudoku_space][8]<0))//checks if value is invalid
                {
                        printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
                        printf("you entered an invalid number\n");
                        printf("please try again\n\n");
                        draw_board();
                        printf("what is the value of %s?\n", str_blank_board[board_space]);//re-print space where vlaue will be inputted
                        scanf("%d", & sudoku[sudoku_space][8]);//enter value
                }
    
    
            }while((sudoku[sudoku_space][8]>9) ||(sudoku[sudoku_space][8]<0));
                board_space++;
        printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
        draw_board();
    
    
        //////////////////////////////////////////////////////////////////////////////////////////
    
    
        }//end for loop
    }

  6. #6
    ATH0 quzah's Avatar
    Join Date
    Oct 2001
    Posts
    14,826
    Why are you passing arguments:
    Code:
      entered_board(sudoku);
    To functions that you don't specify as having arguments:
    Code:
    void entered_board();
    Code:
    void entered_board()
    {
    Also, a set of empty parenthesis for a function definition means something different than if you have them empty in the function definition.


    Quzah.
    Hope is the first step on the road to disappointment.

  7. #7
    Registered User
    Join Date
    Sep 2006
    Posts
    8,868
    I don't have the time to sort your program out right now. Go here:
    Sudoku Programmers :: Index

    Be sure and specify that you want your program to be a simple brute force solver, and that you are new to programming.

    It would be very good if you read up on how to solve Sudoku by hand, first. Lots of websites will have tutorials for that - Google is your friend.

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. sudoku solver
    By kn1ghtmares in forum C Programming
    Replies: 7
    Last Post: 01-17-2012, 12:09 AM
  2. Please help me with my sudoku solver
    By Tharps in forum Game Programming
    Replies: 6
    Last Post: 12-17-2011, 11:45 PM
  3. Sudoku solver...
    By matsp in forum C++ Programming
    Replies: 24
    Last Post: 02-14-2011, 08:30 PM
  4. Sudoku solver
    By M-S-H in forum C Programming
    Replies: 10
    Last Post: 12-15-2009, 03:26 PM
  5. Help for a sudoku Solver
    By axilleask in forum C Programming
    Replies: 3
    Last Post: 11-26-2007, 04:28 PM