Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void Edge::MakeTree()
- {
- std::queue<Vertice*> que;
- std::unordered_set<Vertice*> visited;
- //From where to start? Starting from first vertice
- que.push(Vertice::AllVertices.begin()->second);
- //in later versions, adding Number of connected components may fix problem
- while(que.size() != 0){
- Vertice* v = que.front();
- que.pop();
- visited.insert(v);
- Vertice::tree.insert(v);
- for (auto x : v->edges) {
- if (x->v1 != v && visited.find(x->v1) == visited.end()){ //ako nije ovaj cvor, nego suprotan, i ako nije posecen
- que.push(x->v1); //ovaj cvor je sigurno u stablu, pa i grana je onda sigurno u stablu
- //x sigurno pripada stablu, jer jedan cvor je deo stabla, a drugi cvor ubacujem u red koji ce
- //takodje biti u redu za stablo.
- Edge::tree.insert(x);
- visited.insert(x->v1);
- Vertice::tree.insert(x->v1);
- }
- else if (visited.find(x->v2) == visited.end()) { //ako je x->v1 == v, onda je x->v2 != v
- que.push(x->v2);
- Edge::tree.insert(x);
- visited.insert(x->v2);
- Vertice::tree.insert(x->v2);
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement