Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int GraphAsList::isConnected2()
- {
- //po difoltu stavljamo da je graf jako povezan pa onda vrsimo proveru da li je stvarno tako
- //ukoliko nije ind ce da promeni vrednost i vrsimo dalju proveru za slabu povezanost
- int ind = 1;
- LinkedNode* ptr = start;
- while (ptr)
- {
- long broj = this->breadthTrav(ptr->node);
- if (broj < this->nodeNum)
- {
- ind = 2;
- }
- ptr = ptr->next;
- }
- if (ind == 1)//ako jeste jako povezan i ind nije promenila vrednost
- return 1;
- //sada vrsimo proveru da li je slabo povezan tako sto ga prevodimo prvo u neorijentisani graf
- //pa ako je on jako povezan, znaci da je orijentisani slabo
- ptr = start;
- while (ptr)
- {
- Edge* pot = ptr->adj;
- while (pot)
- {
- if (!findEdge(pot->dest->node, ptr->node))
- {
- this->insertEdge(pot->dest->node, ptr->node);
- }
- pot = pot->link;
- }
- ptr->status = 1;
- ptr = ptr->next;
- }
- ind = 0;
- ptr = start;
- while (ptr)
- {
- long broj = this->breadthTrav(ptr->node);
- if (broj < this->nodeNum)
- {
- ind = 2;
- }
- ptr = ptr->next;
- }
- if (ind == 0)
- return ind;
- else
- return -1;
- }
- bool GraphAsList::canReach(LinkedNode* ptr1, LinkedNode* ptr2)
- {
- LinkedNode* ptr = start;
- //prvo svim cvorovima postavimo status na neobradjen
- while (ptr)
- {
- ptr->status = 1;
- ptr = ptr->next;
- }
- //sada vrsimo obilazak po dubini, posto ce nam jedino on dati moguci put izmedju dva cvora
- ptr = ptr1;
- StackAsArray stack(nodeNum);
- stack.push(ptr);
- ptr->status = 2;
- while (!stack.isEmpty())
- {
- LinkedNode* st = stack.pop();
- if (st == ptr2)
- return true;//ukoliko smo stigli do cvora vracamo true
- st->status = 3;
- Edge* pot = st->adj;
- while (pot)
- {
- if (pot->dest->status==1)
- {
- pot->dest->status = 2;
- stack.push(pot->dest);
- }
- pot = pot->link;
- }
- }
- return false;//ukoliko cvor nije nadjen
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement