Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- void switchArray(int **arr, int **arrcop, int size){
- for (int y =0; y < size; y++)
- for(int z =0; z < size; z++)
- arrcop[y][z]=arr[y][z];
- return;
- }
- void checkzero(int **arr,int *done,int size,int *row,int *col){
- int plain, simple;
- for (plain =0; plain < size; plain++){
- for(simple =0; simple < size; simple++){
- if(arr[plain][simple]==0){
- *row= plain;
- *col= simple;
- return;
- }
- }
- }
- *done = 1;
- return;
- }
- int magicDiag(int *row, int *col, int ch, int **arr, int size){
- if (*row ==0){
- for(int plain=1; plain < size; plain++){
- if(*col ==0){
- if(arr[*row+plain][*col+plain]==ch)
- return 0;}
- if(*col == size-1){
- if(arr[*row+plain][*col-plain]== ch)
- return 0;}
- }
- return 1;
- }
- if(*row==size-1){
- for(int plain=1; plain < size; plain++){
- if(*col ==0){
- if(arr[*row-plain][*col+plain]==ch)
- return 0;}
- if(*col == size-1){
- if(arr[*row-plain][*col-plain]== ch)
- return 0;}
- }
- return 1;
- }
- if (*row==*col){
- for (int plain =1; plain <= *col; plain++){
- if(arr[*row-plain][*col-plain]==ch)
- return 0;}
- for (int plain =1; plain < size - *col; plain++){
- if(arr[*row+plain][*col+plain]==ch)
- return 0;}
- return 1;}
- if (*col == size-1-*row){
- for (int plain = 1; plain <= *row; plain++){
- if(arr[*row-plain][*col+plain]==ch)
- return 0;}
- for (int plain =1; plain <= *col; plain++){
- if(arr[*row+plain][*col-plain]==ch)
- return 0;}
- return 1;}
- }
- int magicCol(int *row, int *col, int ch, int **arr, int size){
- if (*row==0){
- for (int plain = 1; plain < size; plain++){
- if (arr[plain][*col]== ch)
- return 0;}
- return 1;
- }
- else if(*row==size-1){
- for (int plain = 0; plain < size-1; plain++){
- if (arr[plain][*col]==ch)
- return 0;}
- return 1;
- }
- else{
- for (int plain =0; plain < *row; plain++){
- if(arr[plain][*col]==ch)
- return 0;}
- for (int plain = *row+1; plain < size; plain++){
- if(arr[plain][*col]== ch);
- return 0;}
- return 1;
- }
- }
- int magicRow(int *row, int *col, int ch, int **arr, int size){
- if (*col==0){
- for (int plain = 1; plain < size; plain++){
- if (arr[*row][plain]== ch)
- return 0;}
- return 1;
- }
- else if(*col==size-1){
- for (int plain = 0; plain < size-1; plain++){
- if (arr[*row][plain]==ch)
- return 0;}
- return 1;
- }
- else{
- for (int plain =0; plain < *col; plain++){
- if(arr[*row][plain]==ch)
- return 0;}
- for (int plain = *col+1; plain < size; plain++){
- if(arr[*row][plain]== ch);
- return 0;}
- return 1;
- }
- }
- int checkvalid(int *row,int *col, int ch, int **arr, int size){
- int check = 0;
- int len, wid;
- for(len = 0; len < size; len++){
- for(wid = 0; wid < size; wid++){
- check = magicDiag(row, col, ch, arr, size);
- if(check == 0)
- return 0;
- check = magicCol(row, col, ch, arr, size);
- if(check == 0)
- return 0;
- check = magicRow(row, col, ch, arr, size);
- if(check == 0)
- return 0;
- }
- }
- return check;
- }
- void primary(int **arr,int size,int *done, int **arrcop,int *count){
- int *ptRow, *ptCol;
- int row = 0;
- int col = 0;
- ptRow = &row;
- ptCol= &col;
- int ch=0;
- checkzero(arr, done, size, ptRow, ptCol);
- if(*done){
- *done =0;
- *count=*count+1;
- printf("Count is %d\n", *count);
- switchArray(arr, arrcop, size);
- return;}
- for(ch = 1; ch <= size; ch++){
- int x = checkvalid(ptRow, ptCol, ch, arr, size);
- printf("%d\n", x);
- if(x){
- arr[row][col]=ch;
- for(int each = 0; each < size; each++){
- for(int every = 0; every < size; every++){
- printf("%d ", arr[each][every]);
- }
- printf("\n");
- }
- primary(arr, size, done, arrcop, count);
- arr[row][col]=0;}
- }
- return;
- }
- void printArray(FILE *fpo, int **arr,int *count, int size){
- fprintf(fpo, "%d\n", *count);
- for (int print = 0; print < size; print++){
- for (int print2 = 0; print2 < size; print2++){
- fprintf(fpo, "%d ", arr[print][print2]);
- }
- fprintf(fpo, "\n");
- }
- }
- int main (int argc, char *argv[]){
- FILE *fpi, *fpo;
- fpi = fopen(argv[1],"r");
- fpo = fopen(argv[2],"w");
- int size;
- fscanf(fpi,"%d",&size);
- int a;
- int **arr;
- arr = malloc(sizeof(int *) * size);
- for (a=0; a < size; a++)
- arr[a] = malloc(sizeof(int)*size);
- int **arrcop = NULL;
- arrcop = malloc(sizeof(int *) * size);
- for (a = 0; a < size; a++)
- arrcop[a]= malloc(sizeof(int)*size);
- int x, y;
- for (x = 0; x < size; x++){
- for (y = 0; y < size; y++){
- fscanf(fpi,"%d", &arr[x][y]);
- }
- }
- int *pt1, *pt2;
- int done = 0;
- int count = 0;
- pt1 = &done;
- pt2 = &count;
- //printArray(stdout, arr, pt1, size);
- primary(arr, size, pt1, arrcop, pt2);
- printArray(fpo, arrcop, pt1, size);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement