bonjour,
je vous écrit ce message car je bloque un peu sur une erreur.
pour la fac j ai un tp de backtracking a faire
le sujet etant

I. Présentation
Cinq maisons de couleurs différentes sont habitées par des hommes de nationalités diverses, ayant
chacun un animal favori, une boisson préférée et une marque de cigarettes. Ces cinq maisons
respectent les contraintes suivantes :
– L'Anglais habite la maison rouge.
– Le chien appartient à l'Espagnol.
– On boit du café dans la maison verte.
– L'Ukrainien boit du thé.
– La maison verte est à côté de la blanche, à droite.
– Le fumeur de Old Gold élève des escargots.
– On fume des Kool dans la maison jaune.
– On boit du lait dans la maison du milieu.
– Le Norvégien habite la première maison à gauche.
– Le fumeur de Chesterfield habite à côté du propriétaire du renard.
– Le fumeur de Kool habite à côté du propriétaire du cheval.
– Le fumeur de gitanes boit du vin.
– Le Japonais fume des Craven.
– Le Norvégien habite à côté de la maison bleue.

II. Objectifs

Répondre aux questions :
Qui boit de l'eau ?
A qui appartient le zèbre ?

III. Structure de données

Pour ce problème des structures légères suffiront : une matrice 5x5 (d'entiers ou de caractères par
exemple) contiendra les 5 caractéristiques des 5 maisons.
Dans une première version les contraintes à respecter pourront être codées "en dur" dans la fonction
acceptable.
Dans une deuxième version vous proposerez une structure de données plus générales pour
représenter les contraintes.

IV. Au final

La solution sera donc un tableau rempli respectant toutes les contraintes. Le programme se terminera
en répondant aux deux questions.
Vous rendrez les sources de votre programme accompagné d'un fichier d'explications sous forme
d'une archive tar.
a l'heur actuel j ai fait ceci

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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
 
#include <iostream>
 
using namespace std;
 
//fonction d affichage
void affichage ( string grille[5][5])
{
    cout<<"------------------------------"<<endl;
    for(int i=0; i<5;i++) //on lis ligne par ligne
    {
        cout<<"|";
        for(int j =0 ; j < 5; j++) //on lis colonne par colonne
        {
            cout<<"  "<<grille[i][j]<<" | "; //permet de separer les block de maniere vertical
        }
        cout<<endl;
        cout<<"------------------------------"<<endl;
    }
    cout<<endl;
 
}
//nous allons avoir besoin de fonction pour tester si une valeur est bien abscente d une colonne
 
bool AbsentSurColonne ( string k, string grille[5][5],int j)
{
    for ( int i=0; i<5; i++)
    {
        if ( grille[i][j]==k)//si la valeur est deja presente sur la colonne
            return false;
        return true;
    }
}
 
// Prototype de la fonction
// Cette fonction va recevoir une grille en entree et la reseoudre
 
//nous devons constamment verifier que le choix fait en amont ne provoque pas de blocage en aval
 
// on va doonc utiliser le retour de la fonction pour nous indiquer si la grille est valide ou non
//enfin , comme notre fonction doit etre recursive, nous allonns ajouter un parametre pour savoir quelle case nous somme en train de trater
 
//une case (i,j) dans un tableau peut etre representer par un nombre (i*largeur_tableau)+j, que nous nommerons position
 
bool valide( string maison[5][5], int i ,int a )
{
 
//sur une même ligne: les valeurs doivent être différentes
  for(int k=0;k<i;k++)
   {
        if(maison[i][a]==maison[k][a])
            return false;
   }
 
    //On boit du lait dans la maison du milieu.
    if(  maison[2][3]!="lait")
        return false ;
 
	//– L'Anglais habite la maison rouge
	if( !((maison[i][1]="anglais") && (maison[i][0]="rouge") ))
        return false ;
 
	//– Le chien appartient à l'Espagnol.
	if( !((maison[i][1]="espagnol") && (maison[i][4]="chien")) )
        return false ;
 
	//– On boit du café dans la maison verte.
	if( !((maison[i][2]="cafe") && (maison[i][0]="verte")) )
        return false  ;
 
	//– L'Ukrainien boit du thé.
	if( !((maison[i][1]="ukrainien") && (maison[i][2]="the")) )
        return false;
 
	//– La maison verte est à côté de la blanche, à droite.
	if( !((maison[i][0]="blanche") && (maison[i+1][0]="verte")) )
        return false ;
 
	//– Le fumeur de Old Gold élève des escargots.
	if( !((maison[i][4]="escargots") && (maison[i][3]="old")) )
        return false;
 
	//– On fume des Kool dans la maison jaune.
	if( !((maison[i][3]="kool") && (maison[i][0]="jaune") ))
        return false ;
 
	//– Le fumeur de Chesterfield habite à côté du propriétaire du renard.
	if( !((maison[i][3]="chesterfield") && (maison[i+1][4]="renard" || maison[i-1][4])="renard" )))
        return false;
 
	//– Le fumeur de Kool habite à côté du propriétaire du cheval.
	if( !((maison[i][3]="kool") && ( maison[i+1][4]="chevale" || maison[i-1][4]="cheval") ))
        return false;
 
	//– Le fumeur de gitanes boit du vin.
	if( !((maison[i][2]="vin") && (maison[i][3]="gitane" )))
        return false ;
 
	//– Le Japonais fume des Craven.
	if( !((maison[i][3]="craven") && (maison[i][1]="japonais" ) ))
        return false;
 
	//– Le Norvégien habite à côté de la maison bleue. et le norvegien habite la premiere maison a gauche
	if( !((maison[0][1]="norvegien") && (maison[1][0]="bleu")) )
        return false ;
 
	else
        return true;
 
}
 
bool estValide (string grille[5][5], int position, string tableau[5),tableau [5])
{
    // si on est a la 25eme case ( on sort du tableau)
    if(position == 5*5)
        return true;
 
    //on recupere les coordonnees de la case
    int i = position/5, j = position%5;
 
    //si la case n'est pas vide, on passe a la suivante ( appel recursif)
    if (grille[i][j] !="0")
        return estValide(grille, position +1, tableau[5]);
 
    //enumeration des valeurs possible
    for(int k = 0; k<5 ; k++)
    {
        //si la valeur est abscente ,et si elle repond au contrainte
        if(AbsentSurColonne(tableau[k],grille,i)&& valide )
        {
            //on enregistre dans la grille
            grille[i][j];
            // on appelle recursivement la fonction estValide(), pour voir si ce choix est bon par la suite
            if( est valide (grille, position+1,tableau[5]))
                return true; //si le choix est bon, plus la peine de continuer on renvoie true
        }
    }
    //toutes les valeur ont ete testes, aucun n'est bon , on reinitialise la case
    grille[i][j] = "0";
    //puis on retourn faux
    return false;
}
 
int main ()
{
    //avant tout, on donner les variable possible grace a des tableau
    string couleur [5] = {rouge,verte,jaune,bleu,blanche}
    string nationalite [5] = {anglais,espagnol,norvegien,japonais,ukrainien}
    string boisson [5]= {eau,the,cafe,vin,lait}
    string cigarette [5]= {craven,old,kool,chesterfiel,gitane}
    string animaux [5]= {zebre,renard,chien,cheval,escargots}
   //  nous allons prendre un exemple de grille pour pouvoir tester notre code
    //on cree un tableau en deux dimension
    //les grille vides etant representer par des 0
    int grille[5][5] =
    {
        {0,0,0,0,0},// couleur
        {0,0,0,0,0},//nationalite
        {0,0,0,0,0},//boisson
        {0,0,0,0,0},//cigarette
        {0,0,0,0,0}//animaux
 
    };
 
    cout <<"grille avant"<<endl;
 
    affichage(grille);
    estValide(grille,0,couleur);
    estValide(grille,0,nationalite);
    estValide(grille,0,boisson);
    estValide(grille,0,cigarette);
    estValide(grille,0,animaux);
    cout<<"grille apres"<<endl;
    affichage(grille);
}
mon soucis étant que quand je lance la compilation j'obtient

|

error: no match for 'operator!' (operand type is 'std::basic_string<char>')|

error: no match for 'operator&&' (operand types are 'std::basic_string<char>' and 'std::basic_string<char>')|

error: no match for 'operator||' (operand types are 'const char [7]' and 'std::string {aka std::basic_string<char>}')|

error: expected ']' before ')' token|

error: expected initializer before ')' token|
je ne comprend pas comment réparer les 3 premières erreur et je ne vois pas a quoi font référence les 2 dernières :/
si quelqu un pouvais me renseigner sa serais cool car je bloque la dessus depuis ce matin

et si vous voulez voir la liste d erreur dans son ensemble la voici

||=== Build: Debug in backtracking (compiler: GNU GCC Compiler) ===|
C:\Users\User\Desktop\backtracking\main.cpp||In function 'bool valide(std::string (*)[5], int, int)'
C:\Users\User\Desktop\backtracking\main.cpp|59|error: no match for 'operator&&' (operand types are 'std::basic_string<char>' and 'std::basic_string<char>')|
C:\Users\User\Desktop\backtracking\main.cpp|59|note: candidate is
C:\Users\User\Desktop\backtracking\main.cpp|59|note: operator&&(bool, bool) <built-in>|
C:\Users\User\Desktop\backtracking\main.cpp|59|note: no known conversion for argument 2 from 'std::basic_string<char>' to 'bool'|
C:\Users\User\Desktop\backtracking\main.cpp|63|error: no match for 'operator&&' (operand types are 'std::basic_string<char>' and 'std::basic_string<char>')|
C:\Users\User\Desktop\backtracking\main.cpp|63|note: candidate is
C:\Users\User\Desktop\backtracking\main.cpp|63|note: operator&&(bool, bool) <built-in>|
C:\Users\User\Desktop\backtracking\main.cpp|63|note: no known conversion for argument 2 from 'std::basic_string<char>' to 'bool'|
C:\Users\User\Desktop\backtracking\main.cpp|67|error: no match for 'operator&&' (operand types are 'std::basic_string<char>' and 'std::basic_string<char>')|
C:\Users\User\Desktop\backtracking\main.cpp|67|note: candidate is
C:\Users\User\Desktop\backtracking\main.cpp|67|note: operator&&(bool, bool) <built-in>|
C:\Users\User\Desktop\backtracking\main.cpp|67|note: no known conversion for argument 2 from 'std::basic_string<char>' to 'bool'|
C:\Users\User\Desktop\backtracking\main.cpp|71|error: no match for 'operator&&' (operand types are 'std::basic_string<char>' and 'std::basic_string<char>')|
C:\Users\User\Desktop\backtracking\main.cpp|71|note: candidate is
C:\Users\User\Desktop\backtracking\main.cpp|71|note: operator&&(bool, bool) <built-in>|
C:\Users\User\Desktop\backtracking\main.cpp|71|note: no known conversion for argument 2 from 'std::basic_string<char>' to 'bool'|
C:\Users\User\Desktop\backtracking\main.cpp|75|error: no match for 'operator&&' (operand types are 'std::basic_string<char>' and 'std::basic_string<char>')|
C:\Users\User\Desktop\backtracking\main.cpp|75|note: candidate is
C:\Users\User\Desktop\backtracking\main.cpp|75|note: operator&&(bool, bool) <built-in>|
C:\Users\User\Desktop\backtracking\main.cpp|75|note: no known conversion for argument 2 from 'std::basic_string<char>' to 'bool'|
C:\Users\User\Desktop\backtracking\main.cpp|79|error: no match for 'operator&&' (operand types are 'std::basic_string<char>' and 'std::basic_string<char>')|
C:\Users\User\Desktop\backtracking\main.cpp|79|note: candidate is
C:\Users\User\Desktop\backtracking\main.cpp|79|note: operator&&(bool, bool) <built-in>|
C:\Users\User\Desktop\backtracking\main.cpp|79|note: no known conversion for argument 2 from 'std::basic_string<char>' to 'bool'|
C:\Users\User\Desktop\backtracking\main.cpp|83|error: no match for 'operator&&' (operand types are 'std::basic_string<char>' and 'std::basic_string<char>')|
C:\Users\User\Desktop\backtracking\main.cpp|83|note: candidate is
C:\Users\User\Desktop\backtracking\main.cpp|83|note: operator&&(bool, bool) <built-in>|
C:\Users\User\Desktop\backtracking\main.cpp|83|note: no known conversion for argument 2 from 'std::basic_string<char>' to 'bool'|
C:\Users\User\Desktop\backtracking\main.cpp|87|error: no match for 'operator||' (operand types are 'const char [7]' and 'std::string {aka std::basic_string<char>}')|
C:\Users\User\Desktop\backtracking\main.cpp|87|note: candidate is
C:\Users\User\Desktop\backtracking\main.cpp|87|note: operator||(bool, bool) <built-in>|
C:\Users\User\Desktop\backtracking\main.cpp|87|note: no known conversion for argument 2 from 'std::string {aka std::basic_string<char>}' to 'bool'|
C:\Users\User\Desktop\backtracking\main.cpp|87|error: expected primary-expression before ')' token|
C:\Users\User\Desktop\backtracking\main.cpp|91|error: no match for 'operator||' (operand types are 'const char [8]' and 'std::string {aka std::basic_string<char>}')|
C:\Users\User\Desktop\backtracking\main.cpp|91|note: candidate is
C:\Users\User\Desktop\backtracking\main.cpp|91|note: operator||(bool, bool) <built-in>|
C:\Users\User\Desktop\backtracking\main.cpp|91|note: no known conversion for argument 2 from 'std::string {aka std::basic_string<char>}' to 'bool'|
C:\Users\User\Desktop\backtracking\main.cpp|95|error: no match for 'operator&&' (operand types are 'std::basic_string<char>' and 'std::basic_string<char>')|
C:\Users\User\Desktop\backtracking\main.cpp|95|note: candidate is
C:\Users\User\Desktop\backtracking\main.cpp|95|note: operator&&(bool, bool) <built-in>|
C:\Users\User\Desktop\backtracking\main.cpp|95|note: no known conversion for argument 2 from 'std::basic_string<char>' to 'bool'|
C:\Users\User\Desktop\backtracking\main.cpp|99|error: no match for 'operator&&' (operand types are 'std::basic_string<char>' and 'std::basic_string<char>')|
C:\Users\User\Desktop\backtracking\main.cpp|99|note: candidate is
C:\Users\User\Desktop\backtracking\main.cpp|99|note: operator&&(bool, bool) <built-in>|
C:\Users\User\Desktop\backtracking\main.cpp|99|note: no known conversion for argument 2 from 'std::basic_string<char>' to 'bool'|
C:\Users\User\Desktop\backtracking\main.cpp|103|error: no match for 'operator&&' (operand types are 'std::basic_string<char>' and 'std::basic_string<char>')|
C:\Users\User\Desktop\backtracking\main.cpp|103|note: candidate is
C:\Users\User\Desktop\backtracking\main.cpp|103|note: operator&&(bool, bool) <built-in>|
C:\Users\User\Desktop\backtracking\main.cpp|103|note: no known conversion for argument 2 from 'std::basic_string<char>' to 'bool'|
C:\Users\User\Desktop\backtracking\main.cpp|111|error: expected ']' before ')' token|
C:\Users\User\Desktop\backtracking\main.cpp|111|error: expected initializer before ')' token|
C:\Users\User\Desktop\backtracking\main.cpp||In function 'bool AbsentSurColonne(std::string, std::string (*)[5], int)'
C:\Users\User\Desktop\backtracking\main.cpp|32|warning: control reaches end of non-void function [-Wreturn-type]|
C:\Users\User\Desktop\backtracking\main.cpp||In function 'bool valide(std::string (*)[5], int, int)'
C:\Users\User\Desktop\backtracking\main.cpp|109|warning: control reaches end of non-void function [-Wreturn-type]|
||=== Build failed: 15 error(s), 2 warning(s) (0 minute(s), 0 second(s)) ===|
)