Esempio n. 1
0
/*
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;
}
Esempio n. 4
0
bool contains(LList<T> list, T& e) {
  list.IterStart();

  elem<T> * p;
  while ((p = list.Iter())) {
    if (p->inf == e) {
      return true;
    }
  }
  return false;
}
Esempio n. 5
0
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;
	}

}
Esempio n. 8
0
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;
}