void permuta(int v[], int k, int n, grafo g, grafo f) { int i, aux; int a, b; int tam = g.n_vertices; if (k == n - 1) { mostre(v, n); } else { permuta(v, k + 1, n, g, f); i = k + 1; while (i < n) { aux = v[k]; // troca v[k] = v[i]; v[i] = aux; /* permuta segmento de k+1 ate n e retorna com o segmento restaurado, isto e, da forma como foi passado para a funcao */ permuta(v, k + 1, n, g, f); aux = v[k]; // restuara v[k] = v[i]; v[i] = aux; i = i + 1; } } }
int main(void){ int *v, i, n; printf("Digite a quantidade de elementos: "); scanf("%d", &n); v = alocaVetor(n); inicializaVetor(v,n); permuta(v,n,0); return 0; }
int main() { int n,i; scanf("%d",&n); while(n--) { scanf("%s",s1); len = strlen(s1); qsort(s1,len,1,strcmp2); s2[len]='\n';s2[len+1]='\0'; for(i=0;i!=len;i++) u[i] = 0; permuta(0); printf("\n"); } }
void permuta(int l) { char las = 0; int i; if(l==len) { printf("%s",s2); return; } for(i=0;i<len;i++) { if(!u[i] && s1[i]!=las) { u[i]=1; las = s2[l] = s1[i]; permuta(l+1); u[i]=0; } } }
void permuta(int *v, int n, int i){ int j; if(i==n){ for(j=0;j<n;j++){ printf ("%d ", v[j]); } printf ("\n"); } else{ for(j=i;j<n;j++){ trocaElemento(v,i,j); permuta(v,n,i+1); trocaElemento(v,i,j); } } }
/******************************************************************************* * Programa * ********************************************************************************/ int main(int argc, char**argv) { /* Verifica se há X etradas na execusão do programa */ if(argc != 2){ printf("Execução: \"%s <file_name>\"\n",argv[0]); exit(1); } /* ______________________ ..:: variáveis ::.. _______________________________ */ int i,j,k,aux,seed,Delta,SomaDelta,Si,Sj,SiSj; double dist,CorrFunct,DeltaCorr,CorrFuncR; double SomaMultiI,SomaMultiJ,SomaMultiK; char name[50]; div_t divt; int *ind; double *xi,*yi,*zi,*xj,*yj,*zj; FILE *file, *fout; /* _____________________ ..:: random number ::.. ____________________________ */ i=time(0); j=clock(); divt=div(i, j); k=divt.quot; aux=divt.rem; seed=i+k+aux; gsl_rng_default_seed = seed; gsl_rng *w = gsl_rng_alloc(gsl_rng_mt19937); //printf("time=%d clocl=%d div=%d rem=%d\n",i,j,k,aux); //exit(0); /* ________________________ ..:: vetores ::.. _______________________________ */ sprintf(name,"%s",argv[1]); if((file= fopen(name,"r"))==NULL){ printf("Não foi possível ler o arquivo \"%s\"\n", argv[1]); exit(2); } /* aloca memória para os vetores que conterá o arquivo de entrada */ xi=(double *) calloc(Nsitios, sizeof(double)); yi=(double *) calloc(Nsitios, sizeof(double)); zi=(double *) calloc(Nsitios, sizeof(double)); ind=(int *) calloc(Nsitios, sizeof(int)); if ((xi==NULL) || (yi==NULL) || (zi==NULL) || (ind==NULL)){ printf("Não foi possível alocar memória para os vetores de entrada.\n"); exit(3); } /* aloca memória para o vetor que conterá as mudanças de posições */ xj=(double *) calloc(Nsitios*NCell, sizeof(double)); yj=(double *) calloc(Nsitios*NCell, sizeof(double)); zj=(double *) calloc(Nsitios*NCell, sizeof(double)); if ((xj==NULL) || (yj==NULL) || (zj==NULL)){ printf("Não foi possível alocar memória para os vetores de entrada.\n"); exit(4); } /* copia o arquivo de entrada para os vetores xi, yi, zi, ind */ for(i=0; i < Nsitios; i++){ fscanf(file,"%lf %lf %lf %d",&xi[i],&yi[i],&zi[i],&ind[i]); } fclose(file); // Em linguagem C, começamos a contar pelo zero!!! j=0; /* Celula 1 */ for(k=0; k<Nsitios; k++){ i=j*Nsitios+k; xj[i]=xi[k]; yj[i]=yi[k]; zj[i]=zi[k]+(2*CellZ); } j++; /* Celula 2 */ for(k=0; k<Nsitios; k++){ i=j*Nsitios+k; xj[i]=xi[k]+CellX; yj[i]=yi[k]; zj[i]=zi[k]+CellZ; } j++; /* Celula 3 */ for(k=0; k<Nsitios; k++){ i=j*Nsitios+k; xj[i]=xi[k]+2*CellX; yj[i]=yi[k]; zj[i]=zi[k]; } j++; /* Celula 4 */ for(k=0; k<Nsitios; k++){ i=j*Nsitios+k; xj[i]=xi[k]-CellX; yj[i]=yi[k]; zj[i]=zi[k]+CellZ; } j++; /* Celula 5 */ for(k=0; k<Nsitios; k++){ i=j*Nsitios+k; xj[i]=xi[k]; yj[i]=yi[k]; zj[i]=zi[k]; } j++; /* Celula 6 */ for(k=0; k<Nsitios; k++){ i=j*Nsitios+k; xj[i]=xi[k]+CellX; yj[i]=yi[k]; zj[i]=zi[k]-CellZ; } j++; /* Celula 7 */ for(k=0; k<Nsitios; k++){ i=j*Nsitios+k; xj[i]=xi[k]-2*CellX; yj[i]=yi[k]; zj[i]=zi[k]; } j++; /* Celula 8 */ for(k=0; k<Nsitios; k++){ i=j*Nsitios+k; xj[i]=xi[k]-CellX; yj[i]=yi[k]; zj[i]=zi[k]-CellZ; } j++; /* Celula 9 */ for(k=0; k<Nsitios; k++){ i=j*Nsitios+k; xj[i]=xi[k]; yj[i]=yi[k]; zj[i]=zi[k]-2*CellZ; } j++; /* Celula 10 */ for(k=0; k<Nsitios; k++){ i=j*Nsitios+k; xj[i]=xi[k]; yj[i]=yi[k]+CellY; zj[i]=zi[k]+2*CellZ; } j++; /* Celula 11 */ for(k=0; k<Nsitios; k++){ i=j*Nsitios+k; xj[i]=xi[k]+CellX; yj[i]=yi[k]+CellY; zj[i]=zi[k]+CellZ; } j++; /* Celula 12 */ for(k=0; k<Nsitios; k++){ i=j*Nsitios+k; xj[i]=xi[k]+2*CellX; yj[i]=yi[k]+CellY; zj[i]=zi[k]; } j++; /* Celula 13 */ for(k=0; k<Nsitios; k++){ i=j*Nsitios+k; xj[i]=xi[k]-CellX; yj[i]=yi[k]+CellY; zj[i]=zi[k]+CellZ; } j++; /* Celula 14 */ for(k=0; k<Nsitios; k++){ i=j*Nsitios+k; xj[i]=xi[k]; yj[i]=yi[k]+CellY; zj[i]=zi[k]; } j++; /* Celula 15 */ for(k=0; k<Nsitios; k++){ i=j*Nsitios+k; xj[i]=xi[k]+CellX; yj[i]=yi[k]+CellY; zj[i]=zi[k]-CellZ; } j++; /* Celula 16 */ for(k=0; k<Nsitios; k++){ i=j*Nsitios+k; xj[i]=xi[k]-2*CellX; yj[i]=yi[k]+CellY; zj[i]=zi[k]; } j++; /* Celula 17 */ for(k=0; k<Nsitios; k++){ i=j*Nsitios+k; xj[i]=xi[k]-CellX; yj[i]=yi[k]+CellY; zj[i]=zi[k]-CellZ; } j++; /* Celula 18 */ for(k=0; k<Nsitios; k++){ i=j*Nsitios+k; xj[i]=xi[k]; yj[i]=yi[k]+CellY; zj[i]=zi[k]-2*CellZ; } j++; /* Celula 19 */ for(k=0; k<Nsitios; k++){ i=j*Nsitios+k; xj[i]=xi[k]; yj[i]=yi[k]-CellY; zj[i]=zi[k]+2*CellZ; } j++; /* Celula 20 */ for(k=0; k<Nsitios; k++){ i=j*Nsitios+k; xj[i]=xi[k]+CellX; yj[i]=yi[k]-CellY; zj[i]=zi[k]+CellZ; } j++; /* Celula 21 */ for(k=0; k<Nsitios; k++){ i=j*Nsitios+k; xj[i]=xi[k]+2*CellX; yj[i]=yi[k]-CellY; zj[i]=zi[k]; } j++; /* Celula 22 */ for(k=0; k<Nsitios; k++){ i=j*Nsitios+k; xj[i]=xi[k]-CellX; yj[i]=yi[k]-CellY; zj[i]=zi[k]+CellZ; } j++; /* Celula 23 */ for(k=0; k<Nsitios; k++){ i=j*Nsitios+k; xj[i]=xi[k]; yj[i]=yi[k]-CellY; zj[i]=zi[k]; } j++; /* Celula 24 */ for(k=0; k<Nsitios; k++){ i=j*Nsitios+k; xj[i]=xi[k]+CellX; yj[i]=yi[k]-CellY; zj[i]=zi[k]-CellZ; } j++; /* Celula 25 */ for(k=0; k<Nsitios; k++){ i=j*Nsitios+k; xj[i]=xi[k]-2*CellX; yj[i]=yi[k]-CellY; zj[i]=zi[k]; } j++; /* Celula 26 */ for(k=0; k<Nsitios; k++){ i=j*Nsitios+k; xj[i]=xi[k]-CellX; yj[i]=yi[k]-CellY; zj[i]=zi[k]-CellZ; } j++; /* Celula 27 */ for(k=0; k<Nsitios; k++){ i=j*Nsitios+k; xj[i]=xi[k]; yj[i]=yi[k]-CellY; zj[i]=zi[k]-2*CellZ; } /* Controle ########################################################## inicio */ FILE *cop, *repli; cop = fopen("../dat/copia.dat","w"); for(i=0;i<Nsitios;i++){ fprintf(cop," \t %lf \t %lf \t %lf \t%d\n",xi[i],yi[i],zi[i],ind[i]); } fclose(cop); printf("Arqruivo de entrada copiado com sucesso!\n"); repli = fopen("../dat/replica.dat","w"); for(i=0;i<NCell;i++){ fprintf(repli,"Célula %d \n\n",i+1); for(j=0;j<Nsitios;j++){ fprintf(repli," \t %lf \t %lf \t %lf\n", xj[i*Nsitios+j],yj[i*Nsitios+j],zj[i*Nsitios+j]); } fprintf(repli,"\n"); } fclose(repli); printf("Replicação da célula realizada com exito!\n"); // exit(0); /* Controle ############################################################ FIM */ /* função ??? */ CorrFuncR=(2*PSi-1)*(2*PSi-1); /* Correlação de todas as distâncias */ /* BIG LOOP */ DeltaCorr = 9.123; while(DeltaCorr > PARAM) { dist = 0.000000; SomaMultiK = 0.0; SomaMultiJ = 0.0; SomaMultiI = 0.0; for(i=0; i<Nsitios; i++){ SomaDelta = 0; Delta = 0; Si = 0.000000; Sj = 0.000000; SiSj = 0.000000; for(k=0;k<Nsitios;k++){ for(j=0; j<NCell; j++){ aux=j*Nsitios+k; dist = sqrt ( (xi[i]-xj[aux])*(xi[i]-xj[aux]) + (yi[i]-yj[aux])*(yi[i]-yj[aux]) + (zi[i]-zj[aux])*(zi[i]-zj[aux]) ); //printf("dist = %lf\n",dist); // controle if (dist == 0.000000) Delta=0; else if ((dist <= Rmax) && (dist >= Rmin)) Delta=1; else Delta=0; // DEFINIR Si e Sj if (Delta == 1){ Si=ind[i]; Sj=ind[k]; // <---???? if (ind[i] == 1){ Si=1; } else if (ind[i] == 2){ Si=-1; } else { printf("falha no engano! ind[%d]=%d\n",i,ind[i]); // controle } if (ind[k] == 1){ Sj=1; } else if (ind[k] == 2){ Sj=-1; } else { printf("falha no engano! ind[%d]=%d\n",k,ind[k]); // controle } SiSj=Si*Sj; SomaMultiK += (SiSj*Delta); //printf("\t%d \t%d \t%d\n",Si,Sj,SiSj); } // end if (Delda == 1) SomaDelta += Delta; dist = 0.000000; } // end for j SomaMultiJ += SomaMultiK; SomaMultiK = 0; } // end for k // printf(" O sítio %d possui %d vizinhos.\n",i,SomaDelta); // controle SomaMultiI += SomaMultiJ; SomaMultiJ = 0; } // end for i CorrFunct=(SomaMultiI)/(Nsitios*NViz); DeltaCorr=fabs(CorrFunct-CorrFuncR); /* controle para o usuário */ printf("Delta Correlation Function = %lf\n",DeltaCorr); // controle if (DeltaCorr > PARAM ){ permuta (w,ind); } } // end while /* abre um arquivo para salvar os dados*/ if((fout= fopen("../dat/saida.dat","w"))==NULL){ printf("Não foi possível criar o arquivo \"saida.dat\".\n"); exit(5); } printf("Uhull, convergiu.\n"); for(i=0; i < Nsitios; i++){ fprintf(fout,"\t%lf\t\t%lf\t\t%lf\t\t%d\n",xi[i],yi[i],zi[i],ind[i]); } fclose(fout); free(ind);free(xi);free(yi);free(zi);free(xj);free(yj);free(zj); gsl_rng_free(w); return 0; }