parent
a57357d186
commit
cf64272348
@ -0,0 +1,54 @@
|
||||
#include "Personne3.hpp"
|
||||
#include "Contact3.hpp"
|
||||
|
||||
#include <iostream>
|
||||
#include <unordered_set>
|
||||
#include <queue>
|
||||
|
||||
using namespace std;
|
||||
using namespace reseau2;
|
||||
|
||||
// #define TECHNIQUE_A
|
||||
|
||||
Personne::Personne(const std::string& prenom):prenom{prenom}{
|
||||
// #ifdef TECHNIQUE_A
|
||||
contacts = new ListeContact{};
|
||||
// #else
|
||||
// contacts = new Conteneur{};
|
||||
// #endif
|
||||
}
|
||||
|
||||
const string& Personne::getPrenom() const{
|
||||
return this->prenom;
|
||||
}
|
||||
|
||||
void reseau2::Personne::ajtContact(const Personne &personne) {
|
||||
this->contacts->ajtContact(personne);
|
||||
}
|
||||
|
||||
Personne::~Personne() {
|
||||
delete contacts;
|
||||
}
|
||||
|
||||
bool Personne::peutCommuniquerA(const Personne &p) const {
|
||||
unordered_set<const Personne*> visited;
|
||||
queue<const Personne*> pile;
|
||||
pile.push(this);
|
||||
while (!pile.empty()) {
|
||||
const Personne* front = pile.front();
|
||||
pile.pop();
|
||||
for (const Personne* perso : front->contacts->getValue()) {
|
||||
if (perso == &p) {
|
||||
cout << this->prenom << " peut communiquer avec " << p.getPrenom() << "\n";
|
||||
return true;
|
||||
}
|
||||
else if (visited.find(perso) == visited.end()) {
|
||||
pile.push(perso);
|
||||
visited.insert(perso);
|
||||
}
|
||||
}
|
||||
}
|
||||
cout << this->prenom << " ne peut pas communiquer avec " << p.getPrenom() << "\n";
|
||||
return false;
|
||||
}
|
||||
|
Loading…
Reference in new issue