Advertisement
Guest User

Untitled

a guest
Feb 20th, 2019
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.57 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int array[9][9];
  4. int outputArray[9][9];
  5. int input_value(int x, int y, int value){
  6.  int i,j;
  7.  // Scan horizontally and vertically
  8.  for (i = 0; i < 9; i++) {
  9.   if (value == outputArray[i][y] || value == outputArray[x][i]) {
  10.      
  11.    return 0;
  12.     }
  13.  }
  14.  // Scan its own square
  15.  if (x < 3) {
  16.   if (y < 3) {
  17.    for (i = 0; i < 3; i++) {
  18.     for (j = 0; j < 3; j++) {
  19.      if (value == outputArray[i][j]) {
  20.      
  21.             return  0;
  22.           }
  23.         }
  24.       }
  25.   } else if (y < 6) {
  26.    for (i = 0; i < 3; i++) {
  27.     for (j = 3; j < 6; j++) {
  28.      if (value == outputArray[i][j]) {
  29.             return  0;           }
  30.         }
  31.       }
  32.   } else {
  33.    for (i = 0; i < 3; i++) {
  34.     for (j = 6; j < 9; j++) {
  35.      if (value == outputArray[i][j]) {
  36.             return  0;
  37.           }
  38.         }
  39.       }
  40.     }
  41.  } else if (x < 6) {
  42.   if (y < 3) {
  43.    for (i = 3; i < 6; i++) {
  44.     for (j = 0; j < 3; j++) {
  45.      if (value == outputArray[i][j]) {
  46.             return  0;
  47.           }
  48.         }
  49.       }
  50.   } else if (y < 6) {
  51.    for (i = 3; i < 6; i++) {
  52.     for (j = 3; j < 6; j++) {
  53.      if (value == outputArray[i][j]) {
  54.             return  0;
  55.           }
  56.         }
  57.       }
  58.   } else {    for (i = 3; i < 6; i++) {
  59.     for (j = 6; j < 9; j++) {
  60.      if (value == outputArray[i][j]) {
  61.             return  0;
  62.           }
  63.         }
  64.       }
  65.     }
  66.  } else {
  67.   if (y < 3) {
  68.    for (i = 6; i < 9; i++) {
  69.     for (j = 0; j < 3; j++) {
  70.      if (value == outputArray[i][j]) {
  71.             return  0;
  72.           }
  73.         }
  74.       }
  75.   } else if (y < 6) {
  76.    for (i = 6; i < 9; i++) {
  77.     for (j = 3; j < 6; j++) {
  78.      if (value == outputArray[i][j]) {
  79.             return  0;
  80.           }
  81.         }
  82.       }
  83.   } else {
  84.    for (i = 6; i < 9; i++) {
  85.     for (j = 6; j < 9; j++) {
  86.      if (value == outputArray[i][j]) {
  87.             return  0;
  88.           }         }
  89.       }
  90.     }
  91.  }
  92.  return value;
  93. }
  94. int backtrack(int x, int y) {
  95.  int temp,i,j;
  96.  if (outputArray[x][y] == 0) {
  97.   for (i = 1; i < 10; i++) {
  98.    temp = input_value(x,y,i);
  99.    if (temp > 0) {
  100.     outputArray[x][y] = temp;
  101.         if (x == 8 && y == 8) {
  102.           return 1;
  103.         } else if (x == 8) {
  104.           if (backtrack(0,y+1)) return 1;
  105.         } else {
  106.           if (backtrack(x+1,y)) return 1 ;
  107.         }
  108.       }
  109.     }
  110.   if (i == 10) {
  111.       if (outputArray[x][y] !=  array[x][y]) outputArray[x][y] = 0;
  112.    return 0;
  113.     }
  114.  } else {
  115.   if (x == 8 && y == 8) {
  116.    return 1;
  117.   } else if (x == 8) {    if (backtrack(0,y+1)) return 1;
  118.   } else {
  119.    if (backtrack(x+1,y)) return 1;
  120.     }
  121.  }
  122. }
  123. int main(){
  124.  int i,j;
  125.  FILE * pFile;
  126.  printf("Original outputArray\n");
  127.  pFile = fopen ("myfile.txt","r+");
  128.  for (i = 0; i < 9; i++) {
  129.   fscanf (pFile, "%d %d %d %d %d %d %d %d %d",  
  130.     &array[i][0],&array[i][1], &array[i][2],
  131.     &array[i][3],&array[i][4], &array[i][5],
  132.     &array[i][6],&array[i][7], &array[i][8]);
  133.  }
  134.  fclose (pFile);
  135.    
  136.  for (i = 0; i < 9; i++) {
  137.   for (j = 0; j < 9; j++) {
  138.    outputArray[i][j] = array[i][j];
  139.     }
  140.  }
  141.    
  142.  for (i = 0; i < 9; i++) {
  143.   for (j = 0; j < 9; j++) {
  144.    printf("%d ", array[i][j]);     }
  145.   printf("\n");
  146.  }
  147.  if (backtrack(0,0)) {
  148.   printf("Soln is :\n");
  149.   for (i = 0; i < 9; i++) {
  150.    for (j = 0; j < 9; j++) {
  151.     printf("%d ", outputArray[i][j]);
  152.       }
  153.    printf("\n");
  154.     }
  155.  } else
  156.   printf("No Soln\n");
  157.  return 0;
  158. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement