Bonjour,

j'ai créer une struture et j'aimerais mettre cette structure comme argument d'une fonction. Quand je n'utilise pas la fonction mais seulement le code , cela fonctionne bien. Si maintenant je copie mon code dans la fonction, cela ne fonctionne plus... J'ai l'impression que la fonction s'arrete à la premiere boucle for, qu'elle ne continue pas avec les autres boucles if... Bref ce sera plus parlant avec le code ci -joint :
Code c : 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
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
 
#include <iostream>
#include <vector>
#include <cmath>
#include <string>
#include <fstream>
using namespace std;
 
//Structure contenant les coordonnées d'un point:
struct point{
 float x;
 float y;
};
 
//Structure contenant le nombre de villes + vecteur de coordonnées des différentes villes +tableau de distance euclidienne:
struct TSP_DATA{
	int n;
	vector<point>vec;
	vector< vector<int>>distance;
};
 
 
//Fonction qui renvoie la ville la plus proche non visitée:
int plusproche(TSP_DATA&, int &city){
	int villepro;
	int mini;
	int posi;
	int temporaire;
	int verification;
 
	TSP_DATA donnees;
	donnees.n=52;
	donnees.vec.resize(52);
	donnees.distance.resize(52,vector<int>(52));
	//visitee.resize(52,vector<bool>(52));
	for(int k=0;k<52;k++){
		if(k!=city){
			mini=donnees.distance[city][k];
			posi=k;
			temporaire=city;
			break;
		}
	}
	for(int j=0;j<52;j++){
		if(donnees.distance[temporaire][j]<mini && donnees.distance[temporaire][j]!=0){
			mini=donnees.distance[temporaire][j];
			villepro=j;
			verification=1;
		}
	}
	if(verification!=1){
		mini=donnees.distance[city][posi];
		villepro=posi;
	}
	return villepro;
}
 
 
 
 
 
 
 
int main(){
string filename;
string mot;
string motdim;
string moteucli;
int size;
int min;
int ville;
int tpr;
int pos;
 
 
//Déclaration de la variable TSP_DATA:
TSP_DATA jeudonnees;
 
//Initialisation de la variable TSP_DATA:
jeudonnees.n=52;
 
//Demander le nom du fichier:
cout<<"Entrer le nom du fichier de données :"<<endl;
cin>>filename;
 
//Ouverture du fichier berlin52:
	ifstream infile(filename);
 
//Création d'un vecteur temporaire de mots jusqu'à "DIMENSION:":
while (motdim!="DIMENSION:"){
	int i=0;
	int taille=1;
	infile>>motdim>>ws;
	vector<string>caract1(taille);
	caract1[i]=motdim;
	i+=1;
	taille+=1;
}
 
//Lecture du nombre de villes du fichier:
if(motdim=="DIMENSION:"){
	int taille;
	infile>>taille>>ws;
	size=taille;
}
 
 
//Création d'un vecteur temporaire de mots jusqu'à "EUC_2D" :
while(moteucli!="EUC_2D"){
int i=0;
int taille=1;
infile>>moteucli>>ws;
vector<string>caract3(taille);
caract3[i]=moteucli;
i+=1;
taille+=1;
}
 
//Création d'un vecteur temporaire de mots jusqu'à "NODE_COORD_SECTION" :
while(mot!="NODE_COORD_SECTION"){
int i=0;
int taille=1;
infile>>mot>>ws;
vector<string>caract2(taille);
caract2[i]=mot;
i+=1;
taille+=1;
}
 
//Agrémentation du vecteur vec contenant les coordonnées des villes:
jeudonnees.vec.resize(size);
if(mot=="NODE_COORD_SECTION"){
for(int i=0;i<size;i++){
int espace;
espace=i;
infile>>espace>>ws;
infile>>jeudonnees.vec[i].x>>jeudonnees.vec[i].y>>ws;
	}
}
 
infile.close();
 
 
//affichage des coordonnées des villes:
for (int i = 0; i < size; i++){
cout << "Ville " << i << " (" <<jeudonnees.vec[i].x<<","<<jeudonnees.vec[i].y<< ")"<<endl;
}
 
 
//Vecteur de distance:
jeudonnees.distance.resize(52,vector<int>(52));
if(moteucli=="EUC_2D"){
for(int i=0;i<size;i++){
for(int j=0;j<size;j++){
jeudonnees.distance[i][j]=int(sqrt(pow((jeudonnees.vec[i].x-jeudonnees.vec[j].x),2)+pow((jeudonnees.vec[i].y-jeudonnees.vec[j].y),2)));
	}
}
}
 
//Affichage du vecteur de distance:
for(int i=0;i<size;i++){
	for(int j=0;j<size;j++){
cout<<jeudonnees.distance[i][j]<<" ";
	}
	cout<<endl;
}
 
//Choix de la ville de départ :
cout<<"Indiquer le numéro de la ville de départ entre 0 et 51 :"<<endl;
cin>>ville;
cout<<"La ville de départ est la suivante :"<<endl;
cout << "Ville " << ville+1 << " (" <<jeudonnees.vec[ville].x<<","<<jeudonnees.vec[ville].y<< ")"<<endl;
 
//Création d'un vecteur indiquant l'ordre des villes :
vector<int>trajet(size);
trajet[0]=ville+1;
 
//Affichage du vecteur de distance depuis la ville de départ:
for(int j=0;j<size;j++){
cout<<jeudonnees.distance[ville][j]<<" ";
	}
	cout<<endl;
 
//Création d'un tableau de booléens : 1 si la ville est déjà visitée; 0 sinon:
vector<vector<bool>>visite(size,vector<bool>(size));
 
/*//Calcul du trajet optimal:
while(trajet[51]==0){
	for(int i=1;i<size;i++){
		//choisir le min parmi les villes non visitées (il faut que le min ne soit pas à une ville dejà visitée):
			for(int k=0;k<size;k++){
				if(visite[ville][k]!=1 && k!=ville){
				min=jeudonnees.distance[ville][k];
				pos=k;
				tpr=ville;
				break;
					}
				}
		//Ce vecteur vérifie si on est rentré dans la boucle if au moins une fois:
		vector<int>verif(size);
		for(int j=0;j<size;j++){
					if(visite[tpr][j]==0 && jeudonnees.distance[tpr][j]<min && jeudonnees.distance[tpr][j]!=0){
						min=jeudonnees.distance[tpr][j];
						ville=j;
						verif[i]=1;
						//cout<<min<<" ";
					}
				}
		//Si on n'est jamais entré dans la boucle if, cela veut dire que la ville choisit par le min au départ est la ville la plus proche de la ville précédente:
			if(verif[i]!=1){
				min=jeudonnees.distance[ville][pos];
				ville=pos;
				}
 
				cout<<"le min vaut : "<<min<<endl;
				cout<<"ville visitee numero : "<<ville+1<<endl;
				cout<<"coordonnee de la ville visitee est : "<<jeudonnees.vec[ville].x<<" : "<<jeudonnees.vec[ville].y<<endl;
 
				//Remplissage du vecteur trajet:
				trajet[i]=ville+1;
 
				//Remplissage du vecteur booléen:
				for(int k=0;k<size;k++){
				visite[tpr][k]=1;
				visite[k][tpr]=1;
				}
}
}
 
//affichage du vecteur de bool:
cout<<endl;
for(int i=0;i<size;i++){
	for(int j=0;j<size;j++){
	cout<<visite[i][j]<<" ";
}
	cout<<endl;
}
 
//affichage vecteur trajet :
cout<<endl;
for(int i=0;i<size;i++){
	cout<<trajet[i]<<" ";
}*/
 
//essai de la fonction:
int res;
res=plusproche(jeudonnees,ville);
cout<<res<<endl;
 
 
 
 
}

En fait j'ai l'impression qu'il teste k=0, il trouve une valeur min, il sort de la boucle et il ne fait pas les autres boucles... (dans un premier tps j'ai simplifié la fonction sans mettre le vecteur de booléens, je le mettrais après qd tout fonctionnera ^^)
Pourquoi ?
Merci d'avoir pris le temps de me lire