#include <stdio.h> #include <stdlib.h> #include <time.h> #define n 4 void init(int mat[n][n],int m); void stampa(int mat[n][n],int m); int leggifile(int mat[n][n], int m, char filename[]); void stampafile(int mat[n][n], int m, char filename[]); void chiediutente(int indici[4], int m); int sposta(int mat[n][n], int indici[4]); int main() { int mat[n][n]; int indici[4]; srand(time(NULL)); init(mat,n); stampa(mat,n); chiediutente(indici,n); sposta(mat,indici); stampa(mat,n); } int sposta(int mat[n][n], int indici[4]) { int sposta_verticale,sposta_orizzontale; if(mat[indici[2]][indici[3]]!=0) return 0; else { sposta_verticale = ((indici[0]==indici[2]) && (abs(indici[1]-indici[3])==1)) ; sposta_orizzontale = ((indici[1]==indici[3]) && (abs(indici[0]-indici[2])==1)); if(sposta_verticale || sposta_orizzontale) { mat[indici[2]][indici[3]]= mat[indici[0]][indici[1]]; mat[indici[0]][indici[1]]=0; return 1; } else return 0; } } void chiediutente(int indici[4], int m) { do{ printf("inserisci i di partenza: \n"); scanf("%d",&indici[0]); }while(indici[0]<0 || indici[0]>=m); printf("inserisci j di partenza: \n"); scanf("%d",&indici[1]); printf("inserisci i di destinazione: \n"); scanf("%d",&indici[2]); printf("inserisci j di destinazione: \n"); scanf("%d",&indici[3]); } void init(int mat[n][n],int m) { int v[n*n]; int x =m*m; int p_ele; for (int i=0;i<x;i++) v[i]=i; for(int i=0;i<m;i++) for(int j=0;j<m;j++) { p_ele=random()%x; mat[i][j]=v[p_ele]; v[p_ele]=v[x-1]; x--; } } void stampa(int mat[n][n],int m){ for( int i=0;i<m;i++) { printf("\n"); for(int j=0;j<m;j++) if(mat[i][j]!=0) printf("%d\t",mat[i][j]); else printf(" \t"); } }