Exemplo n.º 1
0
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;
        }
    }
}
Exemplo n.º 2
0
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;
}
Exemplo n.º 3
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");
       }
}
Exemplo n.º 4
0
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;
               }
       }
}
Exemplo n.º 5
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);
		}
	}
}
Exemplo n.º 6
0
/*******************************************************************************
 *                                  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;
}