//a void map(LList<town>& l, LList<connections>& c){ graph<town> g; l.iterStart(); elem_link1<town>*p = l.iter(); while (p->link){ g.addTop(p->inf); } c.iterStart(); elem_link1<connections>*q = c.iter(); while (q->link){ g.addRib(town(q->inf.id1),town( q->inf.id2)); g.addRib(town(q->inf.id2),town( q->inf.id1)); } }
void deleteCity(LList<int>& cities, int id){ cities.iterStart(); elem_link1<int>* p = cities.iter(); while ((p != NULL) && p->inf != id) p = p->link; int temp; cities.deleteElem(p, temp); }
int getSites(int id, LList<City>& cities){ cities.iterStart(); elem_link1<City>* p = cities.iter(); while (p){ if (p->inf.id == id) return p->inf.numSites; p = p->link; } return 0; }
bool member(LList<town>&L, town t){ L.iterStart(); elem_link1<town> * p = L.iter(); while (p->link){ if (p->inf.name = t.name) return true; p = p->link; } return false; }
//1v да се намерят първите k града записани в списъка, намерен в б), с най-много забележителности //около тях, подредени по брой на забележителностите. //namira br zabelejitelnosti po dadeno ID int findCount(LList<town> zabelejitelnosti, int ID) { zabelejitelnosti.iterStart(); elem_link1<town> * p = zabelejitelnosti.iter(); while (p) { if (p->inf.id == ID) return p->inf.count; p = p->link; } return 0; }
bool member(int x, LList <int> l) { l.iterStart(); elem_link1<int> * p = l.iter(); while (p) { if (x == p->inf) return true; p = p->link; } return false; }
LList<int> zad(int k, LList<int> towns, LList<town> zabelejitelnosti) { LList<int> result; towns.iterStart(); elem_link1<int> * p = towns.iter(); elem_link1<int> * mp; //pointer to max while (p) { int max = p->inf; mp = p; elem_link1<int> * q = p->link; while (q) { //namirame broi zabelejitelnosti na stoinostta na p int pzab = findCount(zabelejitelnosti, p->inf); //namirame broi zabelejitelnost na stoinostta na q int qzab = findCount(zabelejitelnosti, q->inf); if (pzab < qzab) { max = q->inf; mp = q; } q = q->link; } mp->inf = p->inf; p->inf = max; p = p->link; } //v towns imame sortirani gradovete po broi zabelejitelnosti towns.iterStart(); elem_link1<int> * m = towns.iter(); for (int i = 0; i < k; i++) { if (!m) break; result.toEnd(m->inf); m = m->link; } return result; }
//Подточка в) 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; }
int getMaxCity(LList<int>& cities, LList<City>& all){ cities.iterStart(); elem_link1<int>* p = cities.iter(); int max = p->inf; p = p->link; while (p){ if (getSites(p->inf, all) > getSites(max, all)){ max = p->inf; } p = p->link; } return max; }
//1a преобразуват текущото представяне на графа до списък от наследници; void recreate(LList<rib> ribs) // Трябва да се добавят върховете от towns! { graph<int> g; ribs.iterStart(); elem_link1<rib>* p = ribs.iter(); while (p) { if (!g.top(p->inf.start)) g.addTop(p->inf.start); if (!g.top(p->inf.end)) g.addTop(p->inf.end); if (!g.rib(p->inf.start, p->inf.end)) g.addRib(p->inf.start, p->inf.end); if (!g.rib(p->inf.end, p->inf.start)) g.addRib(p->inf.end, p->inf.start); p = ribs.iter(); } // return g }
//v void firstk(LList<town> &visited, LList<town>& firstk, int k){ visited.iterStart(); elem_link1<town> * p = visited.iter(); int count = 0; while (p){ town max(0, 0); max.sites = p->inf.sites; while (count != k){ elem_link1<town>*q = p->link; while (q){ if (max.sites < q->inf.sites) max.sites = q->inf.sites; q = q->link; } count++; firstk.toEnd(p->inf); p = p->link; } } }