eccolo
non vi fidavate?
codice:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<conio.h>
#include<time.h>
#define E 3000
int N;
int N3;

int inizio;

int sposta(int i1, int j1, char v[], int *spostamenti[2], int K)
{
    if(K+1>N3)
        return E;
    char *vet=(char *)malloc(N*2+2);
    int *spost[2];
    spost[0]=(int *)calloc(N*3, sizeof(int));
    spost[1]=(int *)calloc(N*3, sizeof(int));
    memcpy(vet, v, N*2+2);
    memcpy(spost[0], spostamenti[0], sizeof(int)*N*3);
    memcpy(spost[1], spostamenti[1], sizeof(int)*N*3);
    
    //sposta
    spost[0][K]=i1;
    spost[1][K]=j1;
    K++;
    vet[j1]=vet[i1];
    vet[j1+1]=vet[i1+1];
    vet[i1]='*';
    vet[i1+1]='*';
    //controlla ordine 
    int c=1;
    if(vet[N+N]!='*'||vet[N+N+1]!='*')
        c=0;
    if(c)
    for(int i=0;i<N+N;i+=2)
        if(vet[i]!='A')
        {
            c=0;
            break;
        }
    if(c)
    {
        FILE *fp;
        fp=fopen("output.txt", "w");
        fprintf(fp, "%d %d", N, K);
        for(int i=0;i<K;i++)
            fprintf(fp, "\n%d %d", spost[0][i]+1, spost[1][i]+1);
        fclose(fp);
        printf("%d", time(NULL)-inizio);
        getch();
        exit(1);
    }
    
    //sposta tt
    for(int i=0;i<=N+N;i++)
        if(vet[i]!='*'&&vet[i+1]!='*')
            if(K==0||i!=spost[1][K-1])
            sposta(i, i1, vet, spost, K);
            
    free(vet);
    free(spost[0]);
    free(spost[1]);
}


int main(void)
{
    inizio=time(NULL);
    char *vet;
    int *spost[2];
    int K=0;
    int i;
    FILE *fp;
    
    fp=fopen("input.txt", "r");
    fscanf(fp, "%d", &N);
    fclose(fp);
    
    N3=N*3;
    vet=(char *)malloc(N*2+2);
    spost[0]=(int *)calloc(N*3, sizeof(int));
    spost[1]=(int *)calloc(N*3, sizeof(int));
    for(i=0;i<N;i++)
        vet[i]='A';
    for(i=N;i<N+N;i++)
        vet[i]='B';
    vet[i++]='*';
    vet[i]='*';
    
    //for(i=0;i<N+N-1;i++)
        sposta(N-1, N+N, vet, spost, K);
    free(spost[0]);
    free(spost[1]);
    free(vet);
    return 0;
}
ma secondo me è da riscrivere da capo...