All pastes #447941 Raw Edit

Unnamed

public text v1 · immutable
·published 2007-04-19 11:58 UTC
rendered paste body
#include <stdio.h>
#include <stdlib.h>
int completed(int array[9][9]);
int numberInRow(int array[9][9], int a, int val);
int numberInCol(int array[9][9], int a, int val);
int numberIn3x3(int array[9][9], int a, int b, int val);
void cheat(int array[9][9] , int di , int dj);
void help(int array[9][9], int di, int dj);
void solve(int array[9][9]);
int EisagogiArithmou(int array[9][9], int di, int dj);
main()

{
        int intch,intch1, i, j,i1,j1,x ,y, z;
        char ch,ch1, arraych[2], arraych1[2];
        FILE *fp,*fp1;
        char epilogi = 0;
        int array[9][9];
        int arraysolve[9][9];
        while (epilogi != '3'){
        epilogi = '0';
        if(epilogi=='0'){
        printf(" 1.Play Sudoku\n 2.Solve Sudoku\n 3.Exit\n============================================\n");
        epilogi = getchar();
        }
        if (epilogi == '1')
                {
                        if((fp = fopen("pinakas.txt", "r")) == NULL) {
                        printf("        Cannot open file.\n");
                        exit(1);}

                         j = 0;
                         i = 0;
                         while ((ch = fgetc(fp)) !=EOF) {
                           arraych[0] = ch;
                           arraych[1]= '\0';
                           intch = atoi(arraych);
                           array[i][j] = intch;
                           j++;
                           if (j==9) {
                             i++;
                             j = 0;}};
                        fclose(fp);


                        for (i=0 ; i<=8 ; i++)
                        {for (j=0 ; j<=8 ; j++)
                          printf("%d ",array[i][j]);
                        printf("\n");}
                         int zeroplaces[82];
                        int pntr = 1;
                        for (i=0; i<9; i++) {
                                for (j = 0; j<9; j++) {
                                        if (array[i][j] ==0) {
                                                zeroplaces[pntr] = i * 10 + j;
                                                        pntr++;}}}

                        int rightinput = 0;
                        int bigwhile =0;
                        while (bigwhile==0)
                        {
                        while (rightinput == 0)
                        {
                        printf("Doste sintategmenes morfis x,y=z Prepei na ixuei: -1<=(x,y)<=8 kai 0<=z<=9\n");
                        scanf("%d,%d=%d",&x,&y,&z);
                        if (x==-1 && y==-1 && z==-1) {bigwhile=1;rightinput=1;}
                        if (x!=-1 || y!=-1) {
                        if (x <= 8 && x>=-1 && y<= 8 && y>=-1 && z>=-1 && z<=10){
                         if (memo(zeroplaces,x,y,pntr)==0 && sper(array,x,y,z)==0)
                           rightinput = 1;
                        }
                        }
                        }
                        /* kataxorisi arithmon ston array */
                        if (x!=-1 || y!=-1) {
                        if (x!=-1 && y!=-1 && z!=10 && z!=-1) {
                                array[x][y]=z;
                                for (i=0; i<9;i++) {
                                        for (j=0; j<9;j++){
                                        printf("%d ", array[i][j]);
                                        }
                                        printf("\n");
                                        }};
                        if (x!=-1 && y!=-1 && z==-1)
                                 help(array,x,y);

                        if (x!=-1 && y!=-1 && z==10){
                                 cheat(array,x,y);}
                        rightinput=0;
                        }
                        }
                        }
                        if(epilogi=='2')
                         solve(array);
                        }
                        return 0;}

        int completed(int array[9][9])
        {
        int a=1, i, j;
        for (i=0 ; i<=8 ; i++) {
         for (j=0 ; j<=8; j++)
         if (array[i][j] == 0)
         a = 0;
        };

        return a;}

        int numberIn3x3(int array[9][9], int a, int b, int val)
        {
        int i, j, logvar = 0;
        for (i = (a/3)*3; i<= (a/3)*3+2; i++) {
                for (j = (b/3)*3; j <= (b/3)*3+2; j++)
                        if (array[i][j] == val) logvar = 1;};

        return logvar;}

        int numberInRow(int array[9][9], int a, int val)
        {
        int b, logrow = 0;
        for (b = 0; b < 9; b++) {
                if (array[a][b] == val) logrow = 1;}
        return logrow;
        }

        int numberInCol(int array[9][9], int a, int val)
        {
        int b, logcol = 0;
        for (b = 0; b < 9; b++) {
                if (array[b][a] == val) logcol = 1;}
        return logcol;
        }

        int validnumber(int a)
        {
        if (a<1 || a>9) return 0 ; return 1;
        }

        int emptyCell(int array[9][9], int a, int b)
        {
        if ( array[a][b] == 0 ) return 0 ; return 1;
        }

        void help(int array[9][9], int di, int dj)
        {
        int i;
        if  (array[di][dj] == 0) {
        printf("Ta diathesima noumera einai:");
        for (i=1 ; i<=9; i++) {
    if (numberInRow(array,di,i) == 0 &&  numberInCol(array,dj,i) == 0 &&  numberIn3x3(array,di,dj,i) == 0)
                printf("%d ", i);}
        };
        printf("\n");
        }

        void cheat(int array[9][9] , int di , int dj)
        {
                FILE *fp1;
                char ch1 , arraych1[2];
                int j1,i1,intch1, arraysolve[9][9];
                 if((fp1 = fopen("lisi.txt", "r")) == NULL) {
                                printf("        Cannot open file.\n");
                                exit(1);}
                         j1 = 0;
                         i1 = 0;
                         while ((ch1 = fgetc(fp1)) !=EOF) {
                           arraych1[0] = ch1;
                           arraych1[1]= '\0';
                           intch1 = atoi(arraych1);
                           arraysolve[i1][j1] = intch1;
                           j1++;
                           if (j1==9) {
                             i1++;
                             j1 = 0;}};
                        fclose(fp1);
                printf("%d\n" , arraysolve[di][dj]);
        }
        /* sinartisi pou elegxei an arxika eixe arithmo h oxi o pinakas */
        int memo(int zeroplaces[81], int di, int dj, int count)
        {
        int u, give = 1;
        for (u = 1; u <= (count -1); u++) {
                if (zeroplaces[u]/10 == di && zeroplaces[u]%10 ==dj) give = 0;};
              if (give ==1)
                printf("To tetragono pou epileksate einai katilimeno apo tin arxi kai dn ginetai na allaksi\n");
        return give;}

        /* sinartisi pou elegxei an o arithmos einai dektos apo tous kanones tou sudoku */
        int sper(int array[9][9], int di, int dj, int dz)
        {
        int give = 1;
        if ( numberInRow(array,di,dz)==0 && numberInCol(array,dj,dz)==0 && numberIn3x3(array,di,dj,dz)==0)
                 give = 0;
        if (dz==0)
                give=0;
        if (give==1)  printf("O arithmos pou epileksate den einai dektos apo tous kanones tou sudoku\n");
        return give;
        }

        void solve(int array[9][9])
        {
        int i,j,o;
        for(i=0;i<=8;i++) {
                for(j=0;j<=8;j++) {
                        if(EisagogiArithmou(array,i,j) ==1) {
                                j=9;
                                i=0;}
                }
        }
        }

        int EisagogiArithmou(int array[9][9], int di, int dj)

        {
        int a,b,i,j,x,y,z,counter=0;
        if  (array[di][dj] == 0) {
        for (i=0 ; i<=9; i++) {
    if (numberInRow(array,di,i) == 0 &&  numberInCol(array,dj,i) == 0 &&  numberIn3x3(array,di,dj,i) == 0){
                x=i;
                y=j;
                z= array[x][y];
                counter++;}
        }
        if(counter ==1){
         array[x][y] = z;
                for (a=0 ; a<=8 ; a++){
                        for (b=0 ; b<=8 ; b++)
                          printf("%d ",array[a][b]);
                        printf("\n");}

        return 1;}
        if(counter!=1) return 0;
        }}