Mi stavo preparando con esercizi base di C per un compito che si terrà in classe fra qualche settimana (vado in 2) e costruendo l'algoritmo per il gioco del 15 mi sono reso conto che qualcosa non andava anche perché appena compilato il programma sembra dare subito la conclusione con la vittoria; di seguito metto il codice in C base:
#include <stdio.h>
#include <stdlib.h>
int** NumSwap(int tabella[4][4], int r, int c)
{
int** matnew;
matnew=(int**)malloc(4*sizeof(int*));
for(int i=0;i<4;i++)
{
 matnew[i]=(int*)malloc(4*sizeof(int));
}
if(tabella[r-1][c]!=0&&tabella[r][c-1]!=0&&tabella[r+1][c]!=0&&tabella[r][c+1]!=0)
{
 printf("ERRORE!!! Sembra che tu non possa muovere questa casella, riprova.");
 for(int i=0;i<4;i++)
 {
  for(int j=0;j<4;j++)
  {
   matnew[i][j]=tabella[i][j];
  }
 }
 for(int i=0;i<4;i++)
 {
  free(tabella[i]);
 }
 return matnew;
}
 if(tabella[r-1][c]==0)
 {
  tabella[r-1][c]=tabella[r][c];
  tabella[r][c]=0;
 }
 if(tabella[r+1][c]==0)
 {
  tabella[r+1][c]=tabella[r][c];
  tabella[r][c]=0;
 }
 if(tabella[r][c-1]==0)
 {
  tabella[r][c-1]=tabella[r][c];
  tabella[r][c]=0;
 }
 if(tabella[r][c+1]==0)
 {
  tabella[r][c+1]=tabella[r][c];
  tabella[r][c]=0;
 }
 for(int i=0;i<4;i++)
 {
  for(int j=0;j<4;j++)
  {
   matnew[i][j]=tabella[i][j];
  }
 }
 for(int i=0;i<4;i++)
 {
  free(tabella[i]);
 }
 free(tabella);
 return matnew;
 
}
main()
{
int tabella[4][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,0,15}};
int** tabnew;
int r,c,conto=1;
do{
 for(int i=0;i<4;i++)
 {
  printf("\n");
  for(int j=0;j<4;j++)
  {
   if(tabella[i][j]!=0)
    printf(" %d",tabella[i][j]);
   else
    printf(" _");
  }
 }
 printf("\n");
 printf("inserisci la riga del numero che decidi di muovere: ");
 scanf("%d",&r);
 printf("inserisci la colonna del numero che decidi di muovere: ");
 scanf("%d",&c);
 
 tabnew=(int**)malloc(4*sizeof(int*));
 for(int i=0;i<4;i++)
 {
  tabnew[i]=(int*)malloc(4*sizeof(int));
 }
 **tabnew=(tabella,r,c);
 
 for(int i=0;i<4;i++)
 {
  printf("\n");
  for(int j=0;j<4;j++)
  {
   if(tabella[i][j]!=0)
    printf(" %d",tabella[i][j]);
   else
    printf(" _");
  }
 }
 
 
}while(tabella[3][3]==0);
printf("\n");
printf("Complimenti, hai vinto al gioco del 15!!");
}