IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

8 dames affichage ?


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 94
    Par défaut 8 dames affichage ?
    Donner la dimension du damier
    4
    0 0 0 0
    0 0 0 1
    0 1 0 0
    0 0 0 0

    0 0 0 0
    0 0 1 0
    0 0 0 0
    0 1 0 0

    2 solutions

    le pb est l'affichage des matrices il doit pas afficher des 0,
    il doit avoir un 1 dans chaque colonne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
     
    #include <stdio.h>
    #include <conio.h>
    #define TailleMax 20
    #define vrai 1
    #define faux 0
     
    int Damier[TailleMax][TailleMax];
     
    void Affiche (int Dim ) {
    	int ParcourLigne,ParcourColonne;
    	for (ParcourLigne=0;ParcourLigne<Dim;ParcourLigne++)
    	{
    		for(ParcourColonne=0;ParcourColonne<Dim;ParcourColonne++)
    			printf("%d\t",Damier[ParcourLigne][ParcourColonne]);
    		printf("\n");
    	}
    }
     
    void Init(int Dim) {
    	int ParcourLigne,ParcourColonne;
    	for (ParcourLigne=0;ParcourLigne<Dim;ParcourLigne++)
    	 for(ParcourColonne=0;ParcourColonne<Dim;ParcourColonne++)
    		Damier[ParcourLigne][ParcourColonne] = 0;
    }
    //
    //fonction qui vérifie si on peut poser une dame à la
    //position Ligne,Colonne en regardant les colonnes vers la
    //gauche.
    //
    int PeutPoser(int Ligne, int Colonne,int Dim){
     
    	int ParcourLigne,ParcourColonne,ok; 
    	ok = vrai;
    	for ((ParcourLigne=Ligne,ParcourColonne=Colonne-1);ParcourColonne>0;ParcourColonne--)
    		if (Damier[ParcourLigne][ParcourColonne]) ok= faux;
    	for ((ParcourLigne=Ligne-1,ParcourColonne=Colonne-1);ParcourLigne>0&&ParcourColonne>0;(ParcourLigne--,ParcourColonne--))
    			if (Damier[ParcourLigne][ParcourColonne]) ok=faux;
    	for ((ParcourLigne=Ligne+1,ParcourColonne=Colonne-1);ParcourLigne<=Dim&&ParcourColonne>0;(ParcourLigne++,ParcourColonne--))
    				if (Damier[ParcourLigne][ParcourColonne]) ok = faux;
    return ok;
    }
    //
     
    //
    //fonction qui essaye mettre une dame dans la colonne "Colonne"
    //si on peut on passe au colonne suivant par appel recusive, sinon
    //on cherche une position dans la colonne précédente.
    //
    int Positionner(int Colonne, int Dim){ 
    	int ParcourLigne,NbreSolutions=0;
     
    	if (Colonne==Dim) {
    		            Affiche(Dim);
    	                printf("\n");  
    	                return 1;
    	} 
     
    	//
        //Mettre la dame dans une ligne du colonne
    	//
    	for (ParcourLigne=1;ParcourLigne<=Dim;ParcourLigne++)     
    		if (PeutPoser(ParcourLigne,Colonne+1,Dim)) 
            {   
    			Damier[ParcourLigne][Colonne+1]=vrai;
     
    			NbreSolutions+=Positionner(Colonne+1,Dim);
    			Damier[ParcourLigne][Colonne+1]=faux;
             }  
     
     
    return NbreSolutions;
    }
     
    //
     
     
    void main(){ 
    	    int TailleDamier;
    	    printf("Donner la dimension du damier \n");
    		scanf("%d",&TailleDamier);
    		Init(TailleDamier);
    		printf("%d solutions\n",Positionner(0,TailleDamier));
     
    		printf("Taper sur une touche pour quitter...");
           _getch();
    }
    merci d'avnace

  2. #2
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Sans éplucher l'algo, deux remarques sur le code (en commentaires) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int PeutPoser(int Ligne, int Colonne,int Dim){
    ...
    	for ((ParcourLigne=Ligne+1,ParcourColonne=Colonne-1);ParcourLigne<=Dim&&ParcourColonne>0;(ParcourLigne++,ParcourColonne--))
      // pourquoi finir à Dim (hors tableau) ? 
    				if (Damier[ParcourLigne][ParcourColonne]) ok = faux;
    ...
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    int Positionner(int Colonne, int Dim){ 
    ...
    	for (ParcourLigne=1;ParcourLigne<=Dim;ParcourLigne++)
      // pourquoi débuter à 1 ?
      // pourquoi finir à Dim (hors tableau) ?  
    		if (PeutPoser(ParcourLigne,Colonne+1,Dim)) 
            {   
    			Damier[ParcourLigne][Colonne+1]=vrai;
    ...            
    }

Discussions similaires

  1. Pb affichage avec un PaintBox (pour eviter scintillement)
    Par juan64 dans le forum C++Builder
    Réponses: 7
    Dernier message: 08/04/2004, 09h21
  2. [VB6] [Flexgrid] Format d'affichage des numériques
    Par yansolo dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 19/10/2002, 21h00
  3. Affichage de documents PDF
    Par Dajon dans le forum C++Builder
    Réponses: 5
    Dernier message: 10/10/2002, 11h36
  4. probléme d'affichage d'une fiche
    Par sb dans le forum Composants VCL
    Réponses: 7
    Dernier message: 29/08/2002, 09h43
  5. Affichage en passant par un buffer...
    Par Sirotilc dans le forum MFC
    Réponses: 5
    Dernier message: 27/05/2002, 21h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo