Advertisement
k0mZ

Untitled

May 10th, 2017
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.34 KB | None | 0 0
  1. #pragma once
  2. #include <iostream>
  3. using namespace std;
  4. #include "StaticStack.h";
  5.  
  6. class GraphAsArrays
  7. {
  8. private:
  9. int* nodes;
  10. int** adjecencyMatrix;
  11. int numberOfNodes;
  12. int maxNumberOfNodes;
  13. public:
  14. GraphAsArrays(int n)
  15. {
  16. nodes = new int[n];
  17. adjecencyMatrix = new int*[n];
  18. for (int i = 0; i<n; i++)
  19. adjecencyMatrix[i] = new int[n];
  20. for (int i = 0; i<n; i++)
  21. for (int j = 0; j<n; j++)
  22. adjecencyMatrix[i][j] = 0;
  23. maxNumberOfNodes = n;
  24. numberOfNodes = 0;
  25. }
  26.  
  27. ~GraphAsArrays()
  28. {
  29. if (nodes != NULL)
  30. delete[] nodes;
  31. if (adjecencyMatrix != NULL)
  32. {
  33. for (int i = 0; i<numberOfNodes; i++)
  34. delete[] adjecencyMatrix[i];
  35. delete[] adjecencyMatrix;
  36. }
  37. }
  38.  
  39. void printGraph()
  40. {
  41. if (numberOfNodes == 0)
  42. {
  43. cout << "Graf je prazan" << endl;
  44. return;
  45. }
  46. for (int i = 0; i<numberOfNodes; i++)
  47. {
  48. cout << nodes[i] << ": ";
  49. for (int j = 0; j<maxNumberOfNodes; j++)
  50. if (adjecencyMatrix[i][j] == 1)
  51. cout << nodes[j] << " ";
  52. cout << endl;
  53. }
  54. }
  55.  
  56. void insertNode(int n)
  57. {
  58. if (numberOfNodes == maxNumberOfNodes)
  59. throw "Graf je pun";
  60. nodes[numberOfNodes++] = n;
  61. }
  62.  
  63. void insertEdge(int n1, int n2)
  64. {
  65. int pom1 = findNode(n1);
  66. int pom2 = findNode(n2);
  67. if (pom1 == -1 || pom2 == -1)
  68. return;
  69. adjecencyMatrix[pom1][pom2] = 1;
  70. }
  71. int findNode(int n)
  72. {
  73. int i = 0;
  74. while (i<numberOfNodes)
  75. {
  76. if (nodes[i] == n)
  77. return i;
  78. i++;
  79. }
  80. return -1;
  81. }
  82.  
  83. int DFS(int r)
  84. {
  85.  
  86. //r od kog cvora pocinje
  87.  
  88. bool* visited = new bool[this->numberOfNodes];
  89. for (int i = 0; i < this->numberOfNodes; i++)
  90. visited[i] = false;
  91.  
  92. Stek* a = new Stek(this->numberOfNodes);
  93. int obidjenih = 0;
  94.  
  95. a->push(r);
  96.  
  97.  
  98. while (!a->isEmpty())
  99. {
  100. int j = a->pop();
  101. cout << j << " ";
  102.  
  103. int k = findNode(j);
  104.  
  105. obidjenih++;
  106. visited[k] = true;
  107. int i = 0;
  108. while (i < numberOfNodes)
  109. {
  110. //po kolonama trazi susede
  111. if (!visited[i] &&
  112. this->adjecencyMatrix[k][i] == 1)
  113. a->push(nodes[i]);
  114. i++;
  115. }
  116.  
  117.  
  118. }
  119.  
  120. return obidjenih;
  121. }
  122.  
  123.  
  124.  
  125.  
  126. bool isSC()
  127. {
  128.  
  129. int i = 0;
  130.  
  131. while (i < this->numberOfNodes)
  132. {
  133. cout << "\n";
  134. int k = DFS(nodes[i]);
  135. cout << "\n";
  136. if (k != this->numberOfNodes)
  137. return false;
  138. i++;
  139. }
  140.  
  141. return true;
  142.  
  143. }
  144. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement