Bonjour,


Je dois manipuler des listes d'adjacences et j'ai procéder de la manière suivante :

J'ai une liste de type list<sommet> liste; sommet est une liste chainée.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
class sommet {
     private :
    // sommet *suivt;   // le suivant dans la liste
    // int elm;    // information contenue
     public :
	  sommet *suivt;   // le suivant dans la liste
     int elm;    // information contenue
 
     sommet *suivant(void) { return suivt; }
     int &contenu(void) { return elm; }
     sommet* supprime_svt();
     sommet* insere(int e);
     };

Dans mon programme, je procède de la manière suivante:

Je créer ma liste.
Les éléments sont lus dans un fichier.
Pour chaque ligne du fichier texte lu
je crée une liste chainée où chaque élément est une valeure lu (des entiers
une fois la liste chainée crée, je l'insère dans ma liste et je recommence avec une nouvelle ligne du fichier.

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
bool graph::charger(char *S,graph & g)
{
 
	int i,j,k,l,N,noeud,suc;
	ifstream ch(S);
	ch>>N;
	cout<<"n: "<<N<<endl;
	n=N;
 
	sommet liste;
	list<sommet>::iterator it;
	it=listeAdj.begin();
 
 
	for(i=0;i<n;i++)
		{
			liste=g.AjoutNoeud(ch,liste,g);
			listeAdj.push_back(liste);
 
 
		}
 
 
	sommet * tmp;
	for(it=listeAdj.begin();it!=listeAdj.end();it++){
		tmp=it;
		while(&tmp->suivant!=NULL){
			cout<<&tmp->elm<<endl;
			&tmp=&tmp->suivant;
		}
 
 
	}
 
	return true;
}
 
 
sommet graph::AjoutNoeud(ifstream & ch,sommet & liste, graph & g)
{
	int lecture,i,j;
	lecture=0;
	while(lecture!=-1){
		ch>>lecture;
		//cout<<"lecture "<<lecture<<endl;
		liste.insere(lecture);
	}
 
	return liste;
}
 
 
 
sommet* sommet::insere(int e)
// insère un nouvel élément de valeur e derrière this.
// renvoie 0 si plus de mémoire, sinon suivt.
{
     sommet *nouveau = new sommet;
     if (!nouveau) return 0;    // plus de mémoire
     nouveau->suivt = suivt;
     nouveau->elm = e;
     return suivt = nouveau;
}
 
 
 
}
Je ne sais pas parcourir ma liste de liste chaînées. J'ai essayé plein de solutions diverses et variées sans succès. Pouvez-vous me donner un petit coup de main?

merci d'avance...