Example #1
0
File: C10.c Project: gv2vi/DrumPack
void 
ecrireGraph (char *nom, int k)
{
  FILE *descFic = NULL;
 
  ouvrirFichier (nom, &descFic, "w");
  ecrireEnTete (descFic, "p cnf ", k);
  

for(int x=1; x<=nb_sommet(); x++)
	{		fprintf(descFic, " %d ", x );
				
			for(int y=0; y<=nb_sommet(); y++)
			{
				if( (est_adjacent(x,y)==1) )
				{
					fprintf(descFic, " %d ", y);
				}
						
			}
			
			fprintf(descFic, " 0\n");
	       }

  fclose (descFic);
}
Example #2
0
int est_adjacent(int u, int v){
 if(0< u && 0<v && u<nb_sommet()+1 && v<nb_sommet()+1){
  int i,j;
  i=u-1;
  j=v-1;
  if((i/3==j/3) && ((i/9==j/9) || (i/9==j%3 && j/9==i%3)))
   return 1; 
  if(i/3==j%3 && i/3==(j/3)%3 && j/3==i%3 && j/3==(i/3)%3)
   return 1;
  }
 return 0;
}
Example #3
0
int est_adjacent(int u, int v){
 if(0< u && 0<v && u<nb_sommet()+1 && v<nb_sommet()+1){
  int i,j,index=1;
  int T[nb_sommet()+1];
  for(i=0;i<6-1;i++)
   for(j=i+1;j<6;j++)
    {
     T[index]= (1 << i) + (1 << j);
     index++;
    }
  return (!(T[u] & T[v]));
 }	
 else return 0;
}
void generateur_de_clause(int k){
  int nb_var= nb_sommet() * k;
  int nb_clause=0;
  
  //première ligne du fichier de glucose
  fprintf(fichier,"%s %s %d %s\n","p","cnf",nb_var,"              ");
  
  //chaque_position au moins un sommet
  for(int j= 1 ; j<=k ; j++) {
    for(int i = 0; i<nb_sommet()*k; i=i+k){    
      fprintf(fichier,"%d ",i+j);
    }
    fprintf(fichier,"0 \n");
    nb_clause++;
  }

  //au moins une extrêmité par arrête
  for(int i=1; i<=nb_sommet(); i++) {
    for(int j=1; j<=nb_sommet(); j++){

      if(est_adjacent(i,j)){
	for(int t=0;t<k*nb_sommet();t=t+nb_sommet()){
	  fprintf(fichier,"%d %d ",i+t,j+t);
	}
	fprintf(fichier,"0\n");
	nb_clause++;
      }
  
      //pas deux sommets différents a la même position
      for(int j= 1 ; j<=nb_sommet()*k ; j=j+nb_sommet()) {
	for(int t=j; t<=j+nb_sommet()-1; t++){
	  for(int i=t+1; i<=j+nb_sommet()-1; i++){
	    fprintf(fichier,"-%d -%d 0\n",t,i);
	    nb_clause++;
	  }
	}
      }
  
    }
  }
  

  //remplissage de l'entête du fichier input de glucose
  fseek(fichier, 0, SEEK_SET);
  fprintf(fichier,"%s %s %d %d","p","cnf",nb_var,nb_clause);
  
}
Example #5
0
File: C10.c Project: gv2vi/DrumPack
int main(int argc, char* argv[])
{
	int status; 
	pid_t fork_return; 

	fork_return = fork(); 

	if (fork_return == 0) /* child process */ 
	{ 
	    int k;
	    printf("Choose K : \n");
	    scanf("%d", &k);
	    ecrireGraph("Graphe.in", k) ;
    	    ecrireComb("Combinaison.in", nb_sommet(), k);
    	    exit(0); 
	} 
	else /* parent process */ 
	{ 
  	wait(&status); 
  	char command[50];
    	strcpy( command, "cat Graphe.in Combinaison.in > Final.in" );
    	system(command);
 	} 
}
Example #6
0
File: C10.c Project: gv2vi/DrumPack
void 
ecrireEnTete (FILE *descFic, char *mode, int k)
{
  fprintf (descFic, "%s", mode);
  fprintf (descFic, "%d %d \n", nb_sommet(), nb_sommet()+comb_cal(k));
}
Example #7
0
File: C10.c Project: gv2vi/DrumPack
int comb_cal(int n)
{
	return fact(nb_sommet()) / ( ( fact(n) ) * ( fact(nb_sommet() - n) )  );
}