Graphe Lire

mail@pastecode.io avatar
unknown
c_cpp
3 years ago
938 B
3
Indexable
Never
Graphe Graphe::Lire(const string nom)
{
	Graphe resultat;

	ifstream fichier(nom);

	string temp;

	while (getline(fichier, temp))
	{
		stringstream ligne(temp);

		string source;
		ligne >> source;

		itNoeud it = resultat.noeuds.find(source);

		Noeud* sommetSource = (it == resultat.noeuds.end())
			? NULL
			: it->second
			;

		if (sommetSource == NULL)
			sommetSource = new Noeud(source);

		resultat.noeuds[source] = sommetSource;

		string dest;
		int poids;

		while (ligne >> dest >> poids)
		{
			itNoeud it = resultat.noeuds.find(dest);

			Noeud* sommetDest = (it == resultat.noeuds.end())
				? NULL
				: it->second
				;
			if (sommetDest == NULL)
			{
				sommetDest = new Noeud(dest);
				resultat.noeuds[dest] = sommetDest;
			}

			sommetSource->arcs[dest] = new Arc(poids, sommetDest);
			sommetDest->indegree++;

		}
	}

	fichier.close();

	return resultat;

}