C++ grafy
-
Carm@gedon
Light Expert
- Príspevky: 47
- Registrovaný: 07 dec 2006, 20:00
C++ grafy
Ahojte,
chcel by som sa opytat ci mam dobre prehladavanie grafov...
Hlavne to do sirky sa mi nejak nezda.
Dik
http://paste.jabbim.cz/5657
chcel by som sa opytat ci mam dobre prehladavanie grafov...
Hlavne to do sirky sa mi nejak nezda.
Dik
http://paste.jabbim.cz/5657
Re: C++ grafy
V tom prehladavani do hlbky absolutne nemusi byt riadok pretoze stav toho ze je to uz prehladany vrchol sa nastavi pri rekuzivnom volani dohlbky na riadku osobne by som vsak preferoval nejaku bool hodnotu toho ci je to uz prehladany alebo neprehladany vrchol.
Co sa tyka prehladavania do sirky, tak nikde nevidim ze by si aktualnemu vrcholu nastavil hodnotu ze je uz prehladany. Taktiez som si vsak vsimol ze nastavujes hned vrcholu ze je prehladany, pricom je len spracovany a dany do fronty. Za riadok dopln a zmaz z toho cyklu prehladavania susedov riadok
EDIT: A len taka optimalizacna vec, skus si zvyknut na zapis ++x namiesto x++. Taktiez k akemusi "standardu" patri ze sa nepristupuje priamo k clenom triedy. Tieto cleny by mali byt private/protected a mali by sa pouzivat metody na nastovavanie ich hodnot, alebo ziskanie ich hodnot. To len tak k okraju. 
Kód: Vybrať všetko
it->second->name="Prehladane!";Kód: Vybrať všetko
temp->name="Prehladane!";Co sa tyka prehladavania do sirky, tak nikde nevidim ze by si aktualnemu vrcholu nastavil hodnotu ze je uz prehladany. Taktiez som si vsak vsimol ze nastavujes hned vrcholu ze je prehladany, pricom je len spracovany a dany do fronty. Za riadok
Kód: Vybrať všetko
for(it=vrcholy.begin();it != vrcholy.end();it++)Kód: Vybrať všetko
V->name = "Prehladane!";Kód: Vybrať všetko
it->second->name="Prehladane!";-
Carm@gedon
Light Expert
- Príspevky: 47
- Registrovaný: 07 dec 2006, 20:00
Re: C++ grafy
jj nemusi ...-=wolf=- napísal:V tom prehladavani do hlbky absolutne nemusi byt riadokpretoze stav toho ze je to uz prehladany vrchol sa nastavi pri rekuzivnom volani dohlbky na riadkuKód: Vybrať všetko
it->second->name="Prehladane!";osobne by som vsak preferoval nejaku bool hodnotu toho ci je to uz prehladany alebo neprehladany vrchol.Kód: Vybrať všetko
temp->name="Prehladane!";
Co sa tyka prehladavania do sirky, tak nikde nevidim ze by si aktualnemu vrcholu nastavil hodnotu ze je uz prehladany. Taktiez som si vsak vsimol ze nastavujes hned vrcholu ze je prehladany, pricom je len spracovany a dany do fronty. Za riadokdoplnKód: Vybrať všetko
for(it=vrcholy.begin();it != vrcholy.end();it++)a zmaz z toho cyklu prehladavania susedov riadokKód: Vybrať všetko
V->name = "Prehladane!";Kód: Vybrať všetko
it->second->name="Prehladane!";
inak to
Kód: Vybrať všetko
V->name = "Prehladane!";Re: C++ grafy
Pockaj ja som sa teraz zamotal v nazvach tvojich premennych. Asi budem musiet nakoniec spustit ten CodeBlocks. Daj mi cas chvilu.
//autoeditácia príspevku (05 Máj 2012, 15:59)
Takto by to malo vyzerat, pisal som to vsak bez kompilatora takze za pripadne chyby nerucim.
//autoeditácia príspevku (05 Máj 2012, 15:59)
Takto by to malo vyzerat, pisal som to vsak bez kompilatora takze za pripadne chyby nerucim.
Kód: Vybrať všetko
void do_sirky(Vertex* temp)
{
stack<Vertex*> fronta;
set<Vertex*>::iterator it;
fronta.push(temp);
Vertex* V;
while(!fronta.empty())
{
V=fronta.top();
fronta.pop();
if (V->name == "Prehladane!")
continue;
V->name = "Prehladane!";
for (it = V->susedia.begin(); it != V->susedia.end(); ++it)
{
if ((*it)->name != "Prehladane!")
fronta.push(*it);
}
}
}-
Carm@gedon
Light Expert
- Príspevky: 47
- Registrovaný: 07 dec 2006, 20:00
Re: C++ grafy
dik, ale v podstate mam to iste, len ty si to napisal jednoduhsie nie?-=wolf=- napísal:Pockaj ja som sa teraz zamotal v nazvach tvojich premennych. Asi budem musiet nakoniec spustit ten CodeBlocks. Daj mi cas chvilu.
//autoeditácia príspevku (05 Máj 2012, 15:59)
Takto by to malo vyzerat, pisal som to vsak bez kompilatora takze za pripadne chyby nerucim.![]()
Kód: Vybrať všetko
void do_sirky(Vertex* temp) { stack<Vertex*> fronta; set<Vertex*>::iterator it; fronta.push(temp); Vertex* V; while(!fronta.empty()) { V=fronta.top(); fronta.pop(); if (V->name == "Prehladane!") continue; V->name = "Prehladane!"; for (it = V->susedia.begin(); it != V->susedia.end(); ++it) { if ((*it)->name != "Prehladane!") fronta.push(*it); } } }
Re: C++ grafy
Ono skusil som tvoj program spustit, prehlada sice vsetky vrcholy ale robis to fakt divne. Zbytocne iteracie podla mna.