Advertisement
Go-Ice

ZeroJudge [a016: 數獨(SUDOKU)] by Go-Ice

Sep 28th, 2015
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.81 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. main(){
  5.     int array[9][9];
  6.     int check[10];
  7.     int flag; /* 1 = yes */
  8.     int indexR, indexC, index;
  9.     int startR, startC, nine;
  10.  
  11.     while ( scanf("%d", &array[0][0]) != EOF ){
  12.         for ( indexR=0 ; indexR<9 ; indexR++ ){
  13.             for ( indexC=0 ; indexC<9 ; indexC++ ){
  14.                 if ( indexR==0 && indexC==0 )
  15.                     continue;
  16.                 scanf("%d", &array[indexR][indexC]);
  17.             }
  18.         }
  19.  
  20.         flag = 1;
  21.  
  22.         /* check each row */
  23.         for ( indexR=0 ; indexR<9 ; indexR++ ){
  24.             /* reset check[index] */
  25.             for ( index=0 ; index<10 ; index++ )
  26.                 check[index]=0;
  27.  
  28.             for ( indexC=0 ; indexC<9 ; indexC++ ){
  29.                 check[array[indexR][indexC]]++;
  30.                 if ( check[array[indexR][indexC]] > 1 ){
  31.                     flag = 0;
  32.                     break;
  33.                 }
  34.             }
  35.  
  36.             if ( flag == 0 )
  37.                 break;
  38.         } /* END row check */
  39.  
  40.         /* check each column */
  41.         if ( flag == 1){
  42.             for ( indexR=0 ; indexR<9 ; indexR++ ){
  43.                 /* reset check[index] */
  44.                 for ( index=0 ; index<10 ; index++ )
  45.                     check[index]=0;
  46.  
  47.                 for ( indexC=0 ; indexC<9 ; indexC++ ){
  48.                     check[array[indexC][indexR]]++;
  49.                     if ( check[array[indexC][indexR]] > 1 ){
  50.                         flag = 0;
  51.                         break;
  52.                     }
  53.                 }
  54.  
  55.                 if ( flag == 0 )
  56.                     break;
  57.             }
  58.         } /* END column check */
  59.  
  60.         if ( flag == 1 ){
  61.             startR=0, startC=0;
  62.             for ( nine=1 ; nine<10 ; nine++ ){
  63.                 /* reset check[index] */
  64.                 for ( index=0 ; index<10 ; index++ )
  65.                         check[index]=0;
  66.  
  67.                 for ( indexR=startR ; indexR<startR+3 ; indexR++ ){
  68.                     for ( indexC=startC ; indexC<startC+3 ; indexC++ ){
  69.                         check[array[indexR][indexC]]++;
  70.                         if ( check[array[indexR][indexC]] > 1 ){
  71.                             flag = 0;
  72.                             break;
  73.                         }
  74.                     }
  75.                     if ( flag == 0 )
  76.                         break;
  77.                 }
  78.                 if ( flag == 0 )
  79.                     break;
  80.  
  81.                 if ( startC == 6 )
  82.                     startC = 0;
  83.                 else startC += 3;
  84.  
  85.                 if ( nine%3 == 0 )
  86.                     startR += 3;
  87.  
  88.             } /* END for nine */
  89.         }
  90.  
  91.         if ( flag == 0 )
  92.             printf("no\n");
  93.         else printf("yes\n");
  94.  
  95.     } /* END big while */
  96.  
  97.     system("PAUSE");
  98.     return 0;
  99. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement