/* 2. За избран човек, да се изведат приятели на неговите приятели, които имат поне 2 общи интереса с него. Хората да се изведат по брой общи интереси в низходящ ред. */ LList<Person> findFriendsOfFriends(graph<Person> g, Person person) { LList<Person> result; LList<Person> friends = neighbours<Person>(g, person); elem<Person> * pFriend; friends.IterStart(); while ((pFriend = friends.Iter())) { LList<Person> friendsFriends = neighbours(g, pFriend->inf); elem<Person> * pf; friendsFriends.IterStart(); while ((pf = friendsFriends.Iter())) { if (pf->inf == person) { continue; } if (contains(friends, pf->inf)) { continue; } result.ToEnd(pf->inf); } } return result; }
// Подточка a) graph<int> toGraph(LList<Connections> conn, LList<City> cities) { LList<int> uniqueCities = citiesToInt(cities); graph<int> g; addTops(g, uniqueCities); uniqueCities.IterStart(); elem<int>* e = uniqueCities.Iter(); while (e) { elem<Connections>* p; conn.IterStart(); p = conn.Iter(); while (p) { Connections a = p->inf; if (e->inf == a.StartCity) { g.addRib(e->inf, a.EndCity); // + g.addRib(a.EndCity, e->inf); } p = p->link; } e = e->link; } return g; }
//Подточка в) LList<int> firstKTowns(LList<City> cities, LList<int> filteredCitiesByDistance, int k) { int currentCities = 0; // not used ??? int MaxNumberOfFamousPlaces = 0; // not used ??? int CurrNumbOfFamousPlaces = 0; // not used ??? int* arr = new arr[filteredCitiesByDistance.len()]; // ??? int i = 0; cities.IterStart(); LList<int> temp; elem<City>* e = cities.Iter(); City a; while (e) { filteredCitiesByDistance.IterStart(); elem<int>* p = filteredCitiesByDistance.Iter(); while (p) { a = e->inf; if (a.ID == p->inf) { arr[i] = a.FamousPlaces; i++; } p = p->link; } e = e->link; } for (size_t j = 0; j < filteredCitiesByDistance.len(); j++) { for (size_t p = 0; p < filteredCitiesByDistance.len() - 1; p++) { if (arr[j] < arr[p + 1]) swap(arr[j], arr[p + 1]); } } for (size_t q = 0; q < k; q++) { cities.iterStart(); elem<City>* p = cities.Iter(); while (p) { City b = p->inf; if (arr[q] == b.FamousPlaces) { temp.ToEnd(b.ID); } } } delete[]arr; return temp; }
bool contains(LList<T> list, T& e) { list.IterStart(); elem<T> * p; while ((p = list.Iter())) { if (p->inf == e) { return true; } } return false; }
void problem_1(graph<Person> g, Person person) { LList<Person> n = neighbours<Person>(g, person); n.IterStart(); elem<Person> * aFriend; while ((aFriend = n.Iter())) { if ((aFriend->inf).age == person.age) { cout << (aFriend->inf) << endl; } } }
//Подточка б) bool contains(LList<int> l,LList<int> c) { if (l.empty()) return false; l.IterStart(); elem<int>* e = l.Iter(); while (e) { c.IterStart(); elem<int>* p = c.Iter(); while (p) { if (e->inf == p->inf) return true; p = p->link; } e = e->link; } return false; }
void addTops(graph<int>& g, LList<int> l) { if (l.empty()) return; l.IterStart(); elem<int>* e = l.Iter(); while (e) { g.addTop(e->inf); e = e->link; } }
LList<Person> filterByCommonInterests(LList<Person>& people, Person person, int minCommonInterests) { LList<Person> result; people.IterStart(); elem<Person> * pff; while ((pff = people.Iter())) { if (numberOfCommonInterests(person, pff->inf) >= minCommonInterests) { result.ToEnd(pff->inf); } } return result; }
LList<int> citiesToInt(LList<City> c) { if (c.empty()) return LList<int>(); LList<int> temp; elem<City>* e; c.IterStart(); e = c.Iter(); while (e) { City a = e->inf; temp.ToEnd(a.ID); e = e->link; } return temp; }