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); }
//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 }
//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)); } }
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; }
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; }
//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; } } }