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

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