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...