Advertisement
Guest User

Untitled

a guest
May 30th, 2015
208
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.86 KB | None | 0 0
  1. int GraphAsList::isConnected2()
  2. {
  3.  
  4. //po difoltu stavljamo da je graf jako povezan pa onda vrsimo proveru da li je stvarno tako
  5. //ukoliko nije ind ce da promeni vrednost i vrsimo dalju proveru za slabu povezanost
  6. int ind = 1;
  7. LinkedNode* ptr = start;
  8. while (ptr)
  9. {
  10. long broj = this->breadthTrav(ptr->node);
  11. if (broj < this->nodeNum)
  12. {
  13. ind = 2;
  14. }
  15. ptr = ptr->next;
  16. }
  17.  
  18. if (ind == 1)//ako jeste jako povezan i ind nije promenila vrednost
  19. return 1;
  20.  
  21. //sada vrsimo proveru da li je slabo povezan tako sto ga prevodimo prvo u neorijentisani graf
  22. //pa ako je on jako povezan, znaci da je orijentisani slabo
  23. ptr = start;
  24. while (ptr)
  25. {
  26. Edge* pot = ptr->adj;
  27. while (pot)
  28. {
  29. if (!findEdge(pot->dest->node, ptr->node))
  30. {
  31. this->insertEdge(pot->dest->node, ptr->node);
  32. }
  33. pot = pot->link;
  34. }
  35. ptr->status = 1;
  36. ptr = ptr->next;
  37. }
  38.  
  39. ind = 0;
  40.  
  41. ptr = start;
  42. while (ptr)
  43. {
  44. long broj = this->breadthTrav(ptr->node);
  45. if (broj < this->nodeNum)
  46. {
  47. ind = 2;
  48. }
  49. ptr = ptr->next;
  50. }
  51.  
  52. if (ind == 0)
  53. return ind;
  54. else
  55. return -1;
  56. }
  57.  
  58.  
  59. bool GraphAsList::canReach(LinkedNode* ptr1, LinkedNode* ptr2)
  60. {
  61. LinkedNode* ptr = start;
  62. //prvo svim cvorovima postavimo status na neobradjen
  63. while (ptr)
  64. {
  65. ptr->status = 1;
  66. ptr = ptr->next;
  67. }
  68.  
  69. //sada vrsimo obilazak po dubini, posto ce nam jedino on dati moguci put izmedju dva cvora
  70. ptr = ptr1;
  71. StackAsArray stack(nodeNum);
  72. stack.push(ptr);
  73. ptr->status = 2;
  74. while (!stack.isEmpty())
  75. {
  76. LinkedNode* st = stack.pop();
  77. if (st == ptr2)
  78. return true;//ukoliko smo stigli do cvora vracamo true
  79. st->status = 3;
  80. Edge* pot = st->adj;
  81. while (pot)
  82. {
  83. if (pot->dest->status==1)
  84. {
  85. pot->dest->status = 2;
  86. stack.push(pot->dest);
  87. }
  88. pot = pot->link;
  89. }
  90. }
  91. return false;//ukoliko cvor nije nadjen
  92. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement