/*Cette fonction affiche tous les éléments de la pile*/
void affiche_pile (pile *p)
{
  if (!estVide(p))
  {
    Cell *c=p->top;
    while (c!=NULL)
    {
     printf("joueur:%d x:%d y:%d, borne=%d\n",c->elt.joueur,c->elt.coordonnee_x,c->elt.coordonnee_y,c->elt.borne);
      c=c->next;
    }
  }
}
示例#2
0
/**
 * Retire le premier élément de la Pile 'p' et l'incrit dans 'tn'.
 *
 * Note : si la pile 'p' est vide, l'appel est bloquant jusqu'à ce qu'un élément
 * y soit inséré.
 */
void depile( Pile * p, TabNombres * val)
{
  while ( estVide( p ) )
    {
      
      //if(stop){
        pthread_exit(NULL);
      //}
      
    }
  *val = p->T [ p->sommet ];
  --( p->sommet );
}
/*Cette fonction renvoie l'élément qui est au sommet de la pile*/
element sommet (pile *p)
{
  element som;
  som.coordonnee_x=0;
  som.coordonnee_y=0;
  som.joueur=-1;
  som.borne=0;
  if (!estVide(p))
  {
    Cell *c=p->top;
    som=c->elt;
  }
  return som;
}
示例#4
0
void afficherParcoursLargeur(const Abin a)
{
	FileAttente f;

	init(f);

	ajoutQueue(f, a);
	while (!estVide(f)) {
		if (!estVide(gauche(getTete(f)))) {
			ajoutQueue(f, gauche(getTete(f)));
		}

		if (!estVide(droite(getTete(f)))) {
			ajoutQueue(f, droite(getTete(f)));
		}
		
		cout << racine(getTete(f));
		retirerTete(f);
	}


	//desinit(f);

}
示例#5
0
文件: struct.c 项目: Mras2an/Utils
Mras2an_struct * suppDebut(Mras2an_struct * l)
{
   Mras2an_struct * temp;
   if (estVide(l))
   {
      return NULL;
   }
   else
   {
      temp=l;
      l = l->suivant;
      free(temp);
      return l;
   }
}
/*Cette fonction dépile la pile, elle renvoie l'élément dépilé*/
element depiler(pile *p)
{ 
  element e_depile;
  e_depile.coordonnee_x=0;
  e_depile.coordonnee_y=0;
  e_depile.joueur=-1;
  e_depile.borne=0;
  if (!estVide(p))
  {
    Cell *cellule_depilee=p->top; 
    e_depile=cellule_depilee->elt;
    p->top=cellule_depilee->next;
    free(cellule_depilee);
  }
    return e_depile;
}
示例#7
0
llist supprimerElementEnTete(llist liste)
{
    if(!estVide(liste))
    {
        /* Si la liste est non vide, on se prépare à renvoyer l'adresse de
        l'élément en 2ème position */
        element* aRenvoyer = liste->nxt;
        /* On libère le premier élément */
        free(liste);
        /* On retourne le nouveau début de la liste */
        return aRenvoyer;
    }
    else
    {
    	return NULL;
    }
}
示例#8
0
void afficherListe(llist liste)
{
	if(estVide(liste)){
		printf("La liste est vide");
	}
	else{
		element *tmp = liste;
		/* Tant que l'on n'est pas au bout de la liste */
		while(tmp != NULL)
		{
			/* On affiche */
			printf("%d ", tmp->val);
			/* On avance d'une case */
			tmp = tmp->nxt;
		}
	}
}
示例#9
0
Arbre ajout(const Arbre arbre, int e) {
	Cell* newCell;
	newCell = (Cell*)malloc(sizeof(Cell));
	newCell->racine = e;
	newCell->gauche = NULL;
	newCell->gauche = NULL;
	if(estVide(arbre)) {
		arbre = newCell;	
	} else {
		if(e <= arbre->racine) {
			arbre->gauche = ajout(arbre->gauche, e);
		} else {
			arbre->droite = ajout(arbre->droite, e);
		}
	}

	return arbre;
}
示例#10
0
文件: struct.c 项目: Mras2an/Utils
int recherche(Mras2an_struct * l, int X)
{
   if (estVide(l))
   {
      return 0;
   }
   else
   {
      if (X == l->compt)
      {
         return 1;
      }
      else
      {
         return(recherche(l->suivant,X));
      }
   }
}
T_ELT acceder(const cartouchiere &c, int p)//throw std::exception
{
    if(p < 0 || p >= c.nb || estVide(c,p))//indice incorrect ou le maillon p n'existe pas
    {
        throw std::exception();
    }
    else
    {
        maillon *m = c.tete;
        while(m != 0)//parcourt des maillons
        {
            if((*m).numero == p)//on retourne l'élément du maillon numéro p
            {
                return (*m).elt;
            }
            m = (*m).suiv;
        }
    }
}
示例#12
0
文件: bot.c 项目: Ayskah/JeuDeDames
calcIA(Jeu *jeu, int prof){
    int i,j,tmp;
    int max = MINEVAL;
    int maxi=-1,maxj=-1;

    if((prof!=0)){
        for(i=0;i<10; i++)
            for(j=0;j<10;j++){
                if(estVide(i,j)){
                    joue(i,j);
                    tmp = calcMin(jeu, prof-1);
                    if((tmp>max)||((tmp==max)&&(Rand::randi(2)))){
                        max = tmp;
                        maxi = i;
                        maxj = j;
					}
				}
			}
	}
    jeu->joue(maxi,maxj);
}
示例#13
0
void parcourirTouteau(s_grille* g, int x,int y)
{
    liste_element *file = (liste_element*)malloc(sizeof(liste_element));// liste finale des noeuds de la file d'attente
    element *s = (element*)malloc(sizeof(element));
    element *ps = (element*)malloc(sizeof(element));
    element*p = (element*)malloc(sizeof(element)); // noeuds du chemin
    int i,j;
    int ii,jj;
    int compteur=500;/// LIMITE pour le dessalement

    ps=&g->elem[x][y];

    //on met toutes les marques à zero
    for(i=0; i<L; i++)
    {
        for(j=0; j<H; j++)
        {
            if(g->elem[i][j].etatsssol==1)
                g->elem[i][j].marque_eau=0;
        }
    }

    //  on alloue la liste, on enfile le premier noeud dans la liste
    file->queue=file->tete=NULL;
    file->taille=0;
//    enfiler(g,file, ps);
////////////////////////////////////////////////////////////////////////////////////////////
    element* nouveau=(element*)malloc(sizeof(element));
    nouveau->next=NULL;
    nouveau->i=ps->i;
    nouveau->j=ps->j;

    if (file->taille==0)
        file->tete = file->queue = nouveau ;
    else
    {
        file->queue->next = nouveau ;
        file->queue = nouveau ;
    }
    file->taille++ ;
    /////////////////////////////////////////////////////////////////////////////////////////////
    // si le noeud de départ ps n'a pas de voisin, retourner la liste qui ne contient que ce noeud
    /* if (g->[ps->i][ps->j]==NULL)
       return ;
    */
    // marquer le noeud de départ ps
    g->elem[ps->i][ps->j].marque_eau = 1;
    g->elem[ps->i][ps->j].alimeau= 1;//on dit que la canalisation est alimentée en eau

    // tant que la file d'attente n'est pas vide et que le noeud out n'est pas atteint
    while (!estVide(file) && compteur>0)
    {
//printf("passage\n");
        s = defiler(file); // défiler le premier noeud de la liste
        // printf("defiler: %d::%d\n",s->i,s->j);
        //  si le noeud défilé arrive au noeud de sortie out (s'il existe), on sort
//printf("taille:%d\n",g->file_elemeau[s->i][s->j].taille);
        // le noeud défilé n'est pas out, enfiler ses voisins non marqués
        if (&g->elem[s->i][s->j] != NULL && (g->file_elemeau[s->i][s->j].taille!=0))
        {
            //printf("passage\n");

            for(p = g->file_elemeau[s->i][s->j].tete ; p != NULL  ; p = p->next)
            {
                if (g->elem[p->i][p->j].marque_eau==0)
                {
                    // printf("coucou%d::%d",p->i,p->j);
////////////////////////////////////////////////////////////////////////////////////////////////////////
                    element* nouveau=(element*)malloc(sizeof(element));
                    nouveau->next=NULL;
                    nouveau->i=p->i;
                    nouveau->j=p->j;

                    if (file->taille==0)
                        file->tete = file->queue = nouveau ;
                    else
                    {
                        file->queue->next = nouveau ;
                        file->queue = nouveau ;
                    }
                    file->taille++ ; // empiler le noeud voisin dans la liste
/////////////////////////////////////////////////////////////////////////////////////////////////
                    ///VERIFICATION DES MAISONS AUX ALENTOURS DE LA CASE D'EAU
                    if(compteur>0)
                     {
                        int temp=0;
                        for(ii=-5; ii<6; ii++)
                        {
                            for(jj=-temp; jj<temp+1; jj++)
                            {
                                if((g->elem[p->i+jj][p->j+ii].etatsol==3)&&(p->i+jj<L)&&(p->j+ii<H)&&(p->i+jj>0)&&(p->j+ii>0)&&(g->elem[p->i+jj][p->j+ii].alimeau==0))
                                {
                                    g->elem[p->i+jj][p->j+ii].alimeau=1;
                                    compteur=compteur-g->elem[p->i+jj][p->j+ii].habitant; /// On décrémente le compteur
                                    printf("alim_maison eau");
                                }
                            }
                            if(ii<0) temp++;
                            else temp--;



                        }
                    }

                      /*  for(ii=0; ii<5; ii++)
                        {

                            if((g->elem[p->i+ii][p->j].etatsol==3)&&(p->i+ii<40)&&(g->elem[p->i+ii][p->j].alimeau==0))//3 conditions : La case est une maison, blindage i
                            {
                                printf("alim_maison");
                                //Et la maison n'est pas encore alimentée
                                g->elem[p->i+ii][p->j].alimeau=1;/// La maison est connectée à la canalisation
                                compteur=compteur-g->elem[p->i+ii][p->j].habitant; /// On décrémente le compteur


                            }
                            if((g->elem[p->i-ii][p->j].etatsol==3)&&(i-ii>0)&&(g->elem[p->i-ii][p->j].alimeau==0))
                            {
                                printf("alim_maison");
                                g->elem[p->i-ii][p->j].alimeau=1;
                                compteur=compteur-g->elem[p->i-ii][p->j].habitant; /// On décrémente le compteur


                            }
                            if((g->elem[p->i][p->j-ii].etatsol==3)&&(p->j-ii>0)&&(g->elem[p->i][p->j-ii].alimeau==0))
                            {
                                printf("alim_maison");
                                g->elem[p->i][p->j-ii].alimeau=1;
                                compteur=compteur-g->elem[p->i][p->j-ii].habitant; /// On décrémente le compteur


                            }
                            if((g->elem[p->i][p->j+ii].etatsol==3)&&(p->j+ii<40)&&(g->elem[p->i][p->j+ii].alimeau==0))
                            {
                                printf("alim_maison");
                                g->elem[p->i][p->j+ii].alimeau=1;
                                compteur=compteur-g->elem[p->i][p->j+ii].habitant; /// On décrémente le compteur


                            }


                        }*/


                        /// FIN de vérification des maisons autour de la case

                    g->elem[p->i][p->j].marque_eau = 1; // marquer le noeud du noeud voisin

                    g->elem[p->i][p->j].alimeau= 1;//on dit que la canalisation est alimentée en eau

                }
                // printf("coucou\n");
// soprintf("voisinsuiv:%d::%d\n",p->next->i,p->next->j);

            }
        }



    }


}
示例#14
0
文件: pile.cpp 项目: Kyri0n/LO21
Expression& Pile::top() const {

    if (estVide()) throw ComputerException("Aucune expression sur la pile");
    return *items.top();
}
示例#15
0
/**
 * @brief Résout un puzzle
 * @param[in,out] p le puzzle à résoudre
 * @param[in] t le damier initial
 * @param[in,out] os flux de sortie
 */
void jouer(Puzzle& p, const Tab2D& t, std::ostream& os) {
	Etat etatInitial;
	Etat etatCourant;
	Tab2D damierFinal;
	Etat etatDerive;

	double tempsDebutRecherche = getTime();

	but(damierFinal, t.nbL, t.nbC);
	initialiser(etatInitial.damier, t.nbL, t.nbC);
	etatInitial.mouvement = FIXE;
	etatInitial.precedent = 0;
	etatInitial.g = 0;

	//Copie du damier inititial dans etatInitial
	for (unsigned int l = 0; l < t.nbL; ++l) {
		for (unsigned int c = 0; c < t.nbC; ++c) {
			etatInitial.damier.tab[l][c] = t.tab[l][c];
		}
	}
	etatInitial.h = manhattan(etatInitial.damier, damierFinal);

	initialiser(etatDerive.damier, t.nbL, t.nbC);

	inserer(p.lEAE, 0, etatInitial); //étatInitial dans LEAE

	bool solutionTrouvee = false;
	bool mvtPossible;
	unsigned int pos;

	while (p.lEAE.nb != 0) {
		pos = minimal(p.lEAE);
		etatCourant = lire(p.lEAE, pos); //on prend le 1er état à explorer
		//insérer étatCourant dans LEE
		inserer(p.lEE, longueur(p.lEE), etatCourant);
		supprimer(p.lEAE, pos); //supprimer étatCourant de LEAE

		if (etatCourant.h == 0) { // le damier de étatCourant est le damier but
			solutionTrouvee = true;
			break; //sortir de la boucle while
		}

		/*pour_tout (mouvement possible associé à étatCourant)
		mouvement possible relatif à damier de étatCourant (etatCourant.damier)
		ordre d'exploration (obligatoire) NORD, EST, SUD, OUEST */
		//initialiser un étatDérivé // d'après le mouvement

		for(int m = OUEST; m >= NORD; --m) {
			mvtPossible = deriver(etatCourant, (Mouvement) m, etatDerive);
			if (mvtPossible && !rechercher(etatDerive, p.lEAE)\
				&& !rechercher(etatDerive, p.lEE)) {
				etatDerive.precedent = longueur(p.lEE) - 1;
				etatDerive.h = manhattan(etatDerive.damier, damierFinal);
				etatDerive.g = etatCourant.g + 1;
				//insérer étatDérivé dans LEAE
				inserer(p.lEAE, longueur(p.lEAE), etatDerive);
			}
		}
	}

	double tempsFinRecherche = getTime();
	cout << "Durée de recherche : " << tempsFinRecherche - tempsDebutRecherche
		<<" seconde(s)."<< endl;

	if (solutionTrouvee) {
		Pile sol;
		Etat etatSol;
		initialiser(sol, 3, 2);
		initialiser(etatSol.damier, t.nbL, t.nbC);

		//Stockage de la solution
		etatSol = lire(p.lEE, longueur(p.lEE)-1);
		empiler(sol, etatSol);
		while (etatSol.precedent != 0) {
			etatSol = lire(p.lEE, etatSol.precedent);
			empiler(sol, etatSol);
		}
		empiler(sol, etatInitial);

		//Affichage de la solution
		os << "Damier : " << t.nbL << " lignes " << t.nbC << " colonnes"
			<< endl;
		os << "Solution en " << sol.sommet << " mouvements" << endl;
		while (!estVide(sol)) {
			afficher(sommet(sol), os);
			os << endl;
			depiler(sol);
		}
		detruire(sol);
		detruire(etatSol.damier);
	}
	else {
		os << "Solution non trouvée" << endl;
	}
	detruire(etatInitial.damier);
	detruire(etatCourant.damier);
	detruire(etatDerive.damier);
	detruire(damierFinal);
}
示例#16
0
int main() {
	int i;
	liste li = nouvListe(), li2 = nouvListe();
	
	adjt(1, li);
	adjt(5, li);
	adjt(-7, li);
		
	printf ("liste : "); affiche(li);
	
	printf("taille : %d\n", taille(li));	
	printf("vide ? : %s\n", (estVide(li)?"oui":"non"));	

	for(i=1; i <= 10; ++i) {
		adjq(i*i, li2);
	} 
	printf ("liste : "); affiche(li2);
	printf("tete : %d queue : %d\n", tete(li2), queue(li2));
	printf("====== suppressions =========\n");
	supt(li2);
	printf ("apres supt : "); affiche(li2);
	supq(li2);
	printf ("apres supq : "); affiche(li2);

	// creation de deux listes avec des elements choisis au hasard
	printf("====== tris et renversement =========\n");

	srand(time(NULL));	// initialisation de la suite aleatoire
	printf("liste 11 : ");
	liste l1 = nouvListe();
	for(i=0; i < 15; ++i) {
	  adjt(rand()%30, l1);
	}
	affiche (l1);
	
	printf("liste 12 : ");
	liste l2 = nouvListe();
	for(i=0; i < 10; ++i) {
	  adjt(rand()%30, l2);
	}
	affiche (l2);

	liste l1t = trie(l1);
	liste l2t = trie(l2);
	printf("liste 11 apres trie : "); affiche(l1t);
	printf("liste 12 apres trie : "); affiche(l2t);
	liste l3t = interclasse(l1t,l2t);
	printf("interclassement : "); affiche(l3t);
	
	printf("renversement iter : "); affiche(renverse_iter(l3t));
	printf("renversement recur : "); affiche(renverse_recur(l3t));

	printf("====== palindrome =========\n");

	
	liste lpalin = nouvListe();
	adjt(1, lpalin); 
	adjt(2, lpalin); adjq(2, lpalin);
	adjt(8, lpalin); adjq(8, lpalin);
	printf("liste : "); affiche(lpalin);
	printf("Palindrome (iter) ? %s\n", (palindrome_iter(lpalin)?"oui":"non"));
	printf("Palindrome (recur) ? %s\n", (palindrome_recur(lpalin)?"oui":"non"));
	supt(lpalin);
	printf("liste : "); affiche(lpalin);
	printf("Palindrome (iter) ? %s\n", (palindrome_iter(lpalin)?"oui":"non"));
	printf("Palindrome (recur) ? %s\n", (palindrome_recur(lpalin)?"oui":"non"));
	
	return 0;
}