C++ Graphe [Probleme] SVP :S

lavoiekeven Messages postés 22 Date d'inscription   Statut Membre Dernière intervention   -  
lavoiekeven Messages postés 22 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour, Voici mon programme je vois où il plante mais je ne comprend pas, De plus de crois que l'algoritme fonctionne pour recreer
une liste extraite d'un fichier txt

Exemple de fichier txt :

1 2 3 5 6
7 8 9 1 6
4 5 6 9 9 5 6 5 6

Voici l'algorithme !!!!!!!!!! :

#include <iostream>
#include <fstream>
#include <string>
#include <conio.h>
using namespace std;


struct adjacent //case de la liste d'adjacence
{
char perte;
char ville;
adjacent *liste;
adjacent *bas;
};

class Graphe
{
private:
int nombre_ville; //nombre de sommet
adjacent *Capitale; // tete de la liste d'adjacence

public:
Graphe(); //constructeur
~Graphe(){} //destructeur
void chemin_plus_court(); //calule le chemin le plus avantageux
void poid_minimale();
void afficher(); // affiche la liste
};

Graphe::Graphe() //constructeur
{
char ft[20],ligne[100],ville;
int i,count = 0,pair=0;
adjacent* tmp = NULL,*courant = NULL; //tmp parcourt de cote, courant vers le bas

//DEmande le fichier d'operation
cout<<"Quelle est le nom du fichier que vous voulez traiter?"<<endl;
cin>>ft;
cout<<endl;
ifstream operation(ft); //ouverture du dossier d'operation
if (operation.fail()) //verifie s'il y a erreur d<ouverture
{
cout << "L'ouverture a echoue!";
}
else
{
do
{
operation.getline (ligne,100); //prend la ligne
i=0;
count++; //calcule le nombre de villes
ville = ligne[i]; // emmagazine le numéro de la ville
i++; //change la case regardée dans ligne
courant->perte = NULL; /////// BLOQUE ICI !!!!!!!!!!!!!!!!!!!!!!!
courant->bas = NULL;
courant->liste = NULL;
cout<<"test";
if (count = 1) //si c'est le premier element c'est la capitale
{
Capitale = courant;
courant->ville = ville; //ecrit le numéro de la ville
}
else //sinon on descent d'une case
{
courant->bas = new adjacent; //Cree des case vers le bas
courant = courant->bas; //change de case
courant->ville = ville; //ecrit le numéro de la ville
}
courant->liste = new adjacent; //cree une case vers le cote
tmp = courant->liste;

do
{
if(ligne[i] = ' ') //si c'est un espace change de case
{
i++;
continue;
}
pair = pair % 2; // c'est des couple (ville perte) rentre a zero donc ville si rendre a 1 perte
if(pair = 0 && ligne[i] >= 0 && ligne[i] <=9)
{
/* while(ligne[i] != ' ') //si c'est un nombre a plusieurs chiffre
{
num[k] = atoi(&ligne[i]);
i++;
k++;
}*/
tmp->ville = ligne[i];
pair++; //prochain sera perte
continue;
}
else
{
/*while(ligne[i] != ' ')
{
num[k] = atoi(&ligne[i]);
i++;
k++;
}*/
tmp->ville = ligne[i];
pair++; //prochain sera une ville
}
tmp->liste = new adjacent; //cree et change de case vers le cote
tmp = tmp->liste;



}while(ligne[i] != '\0'); //tant qu'on est pas a la fin de la ligne
tmp->liste = NULL; // ferme les case de cote

}while(!operation.eof());
nombre_ville = count; // rentre le nombre de villes
courant->bas = NULL; // ferme les case du bas
}
}
void Graphe::afficher() //afficher la liste d'adjacence
{
adjacent * courant = Capitale, * liste_perte; //cournt vers le bas, liste vers le coté
do
{
cout<<"La ville : "<<courant->ville<<" ";
liste_perte = courant->liste;
do
{
cout<<liste_perte->ville<<" perte = "<<liste_perte->perte<<" , ";

}while(liste_perte != NULL);
cout<<endl;
}while(courant->bas != NULL);

}
void main()
{
Graphe graphe_perte_de_ville;
graphe_perte_de_ville.afficher();
}



Merci d'avance Keven !!!!!
A voir également:

1 réponse

lavoiekeven Messages postés 22 Date d'inscription   Statut Membre Dernière intervention  
 
j'ai réussit a trouver une parite du problème, donc j'essais de faire imprimer le liste de haut en bas sa marche mais pas de coter
et je trouve pas le ***** problème

fichier txt :

1 2 3 5 6
7 8 9 1 6
4 5 6 9 9 5 6 5 6


#include <iostream>
#include <fstream>
#include <string>
#include <conio.h>
using namespace std;


struct adjacent //case de la liste d'adjacence
{
char perte;
char ville;
adjacent *liste;
adjacent *bas;
};

class Graphe
{
private:
int nombre_ville; //nombre de sommet
adjacent *Capitale; // tete de la liste d'adjacence

public:
Graphe(); //constructeur
~Graphe(){} //destructeur
void chemin_plus_court(); //calule le chemin le plus avantageux
void poid_minimale();
void afficher(); // affiche la liste
};

Graphe::Graphe() //constructeur
{
char ft[20],ligne[100],ville,grandeur = 0;
int i,count = 0,pair=0;
adjacent* tmp = new adjacent,*courant = new adjacent; //tmp parcourt de cote, courant vers le bas
Capitale = NULL;
tmp = NULL;

//DEmande le fichier d'operation
cout<<"Quelle est le nom du fichier que vous voulez traiter?"<<endl;
cin>>ft;
cout<<endl;
ifstream operation(ft); //ouverture du dossier d'operation
if (operation.fail()) //verifie s'il y a erreur d<ouverture
{
cout << "L'ouverture a echoue!";
}
else
{
do
{
operation.getline (ligne,100); //prend la ligne
i=0;
count++; //calcule le nombre de villes
ville = ligne[i]; // emmagazine le numéro de la ville
i++; //change la case regardée dans ligne
courant->perte = NULL; /////// BLOQUE ICI !!!!!!!!!!!!!!!!!!!!!!!
courant->bas = NULL;
courant->liste = NULL;
if (count <= 1) //si c'est le premier element c'est la capitale
{
Capitale = courant;
Capitale->ville = ville; //ecrit le numéro de la ville
}
else //sinon on descent d'une case
{
courant->bas = new adjacent; //Cree des case vers le bas
courant = courant->bas; //change de case
courant->ville = ville; //ecrit le numéro de la ville
}
courant->liste = new adjacent; //cree une case vers le cote
tmp = courant->liste;

do
{
i++;
tmp->ville = ligne[i];
i++;
i++;
tmp->perte = ligne[i];
i++;
tmp->liste = new adjacent; //cree et change de case vers le cote
tmp = tmp->liste;



}while(ligne[i] != '\0'); //tant qu'on est pas a la fin de la ligne
tmp->liste = NULL; // ferme les case de cote

}while(!operation.eof());
nombre_ville = count; // rentre le nombre de villes
courant->bas = NULL; // ferme les case du bas
}
}
void Graphe::afficher() //afficher la liste d'adjacence
{
adjacent * courant = Capitale, * tmp = NULL; //cournt vers le bas, liste vers le coté
courant = courant->liste;
do
{
cout<<"La ville : "<<courant->ville<<" ";
tmp = courant->liste;
do
{
cout <<tmp->ville<<" "<< tmp->perte<<endl;
tmp = tmp->liste;

}while(tmp->liste != NULL);
cout<<endl;
courant = courant->bas;
}while(courant->bas != NULL);

}
void main()
{
Graphe graphe_perte_de_ville;
graphe_perte_de_ville.afficher(); //afficher la liste
}
0