fuliver123

Sudoku Solver 3x3

Mar 11th, 2016
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.33 KB | None | 0 0
  1. #include<stdio.h>
  2.  
  3. int board[10][10]={},mark_line[10][10]={},mark_column[10][10]={},mark_grid[10][10]={},count=1;
  4.  
  5. int grid(int i, int j)
  6. {
  7.     if (i<4)
  8.     {
  9.         if (j<4)
  10.             return 1;
  11.         else if (j<7)
  12.             return 2;
  13.         else
  14.             return 3;
  15.     }
  16.     else if (i<7)
  17.     {
  18.         if (j<4)
  19.             return 4;
  20.         else if (j<7)
  21.             return 5;
  22.         else
  23.             return 6;
  24.     }
  25.     else
  26.     {
  27.         if (j<4)
  28.             return 7;
  29.         else if (j<7)
  30.             return 8;
  31.         else
  32.             return 9;
  33.     }
  34. }
  35.  
  36. int duyet()
  37. {
  38.     int i,j;
  39.     for (i=1;i<=9;i++)
  40.         for (j=1;j<=9;j++)
  41.             if (board[i][j]>=0 && board[i][j]<10)
  42.             {
  43.                 if (board[i][j]>0)
  44.                 {
  45.                     mark_line[i][board[i][j]]++;
  46.                     mark_column[j][board[i][j]]++;
  47.                     mark_grid[grid(i,j)][board[i][j]]++;
  48.                     if (mark_line[i][board[i][j]]*mark_column[j][board[i][j]]*mark_grid[grid(i,j)][board[i][j]]>1)
  49.                         return 1;
  50.                 }
  51.             }
  52.             else
  53.                 return 1;
  54.     return 0;
  55. }
  56.  
  57. void in(int i, int j)
  58. {
  59.     mark_line[i][board[i][j]]++;
  60.     mark_column[j][board[i][j]]++;
  61.     mark_grid[grid(i,j)][board[i][j]]++;
  62. }
  63.  
  64. void out(int i, int j)
  65. {
  66.     mark_line[i][board[i][j]]--;
  67.     mark_column[j][board[i][j]]--;
  68.     mark_grid[grid(i,j)][board[i][j]]--;
  69. }
  70.  
  71. void PRINT_RESULT()
  72. {
  73.     int i,j;
  74.     if (count==1)
  75.         printf("Loi giai: \n");
  76.     printf("%d. \n",count++);
  77.     for (i=1;i<=9;i++)
  78.     {
  79.         for (j=1;j<=9;j++)
  80.         {
  81.             printf("%d ",board[i][j]);
  82.             if (j%3==0)
  83.                 printf("   ");
  84.         }
  85.         printf("\n");
  86.         if (i%3==0)
  87.             printf("\n");
  88.     }
  89. }
  90.  
  91. int search(int i0, int j0)
  92. {
  93.     int i=i0,j=j0,k;
  94.     for (;i<=9;i++,j=1)
  95.         for (;j<=9;j++)
  96.             if (board[i][j]==0)
  97.             {
  98.                 for (k=1;k<=9;k++)
  99.                     if (mark_line[i][k]==0 && mark_column[j][k]==0 && mark_grid[grid(i,j)][k]==0)
  100.                     {
  101.                         board[i][j]=k;
  102.                         in(i,j);
  103.                         if (search(i,j+1)==0)
  104.                             return 0;
  105.                         out(i,j);
  106.                         board[i][j]=0;
  107.                     }
  108.                 return 1;
  109.             }
  110.     if (i==10)
  111.     {
  112.         PRINT_RESULT();
  113.         int choice;
  114.         printf("Ban co muon tiep tuc tim loi giai khac? \n1. Co    2. Khong \nChoice: ");
  115.         scanf("%d",&choice);
  116.         if (choice==2)
  117.             return 0;
  118.         return 1;
  119.     }
  120. }
  121.  
  122. int main()
  123. {
  124.     int i,j;
  125.     printf("SUDOKU \nNhap vao bai toan theo thu tu tu trai sang phai va tren xuong duoi, \nnhap 0 neu trong. \n");
  126.     printf("Input: ");
  127.     for (i=1;i<=9;i++)
  128.         for (j=1;j<=9;j++)
  129.             scanf("%d",&board[i][j]);
  130.     if (duyet()==0)
  131.         if (search(1,1)==1)
  132.             printf("Khong con dap so nao phu hop! \n");
  133.     return 0;
  134. }
Advertisement
Add Comment
Please, Sign In to add comment