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...