Advertisement
Guest User

Untitled

a guest
Dec 12th, 2019
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.58 KB | None | 0 0
  1. #include <iostream>
  2. #include <queue>
  3.  
  4. using namespace std;
  5.  
  6. struct edge{
  7. int s;
  8. int t;
  9. };
  10.  
  11. class Graph{
  12. private:
  13. int** adjMatrix;
  14. int n; //liczba węzłów
  15. public:
  16. Graph(int n, int m, edge edges[], bool directed = false){
  17. this->n=n;
  18. adjMatrix = new int*[n];
  19. for (int i = 0; i < n; ++i) {
  20. adjMatrix[i]=new int[n];
  21. }
  22. for(int i=0; i<n;i++){
  23. for(int j=0; j<n;j++)
  24. adjMatrix[i][j]=0;
  25. }
  26. for(int i=0; i<m;i++){
  27. adjMatrix[edges[i].s][edges[i].t]=1;
  28. adjMatrix[edges[i].t][edges[i].s]=1;
  29. }
  30.  
  31. }; //tworzy graf w oparciu o pdaną listę krawędzi
  32.  
  33. int edgeCnt(){
  34. int m=0;
  35. for(int i=0; i<n ;i++){
  36. for(int j=0; j<n;j++){
  37. if(adjMatrix[i][j]==1)
  38. m++;
  39. }
  40. }
  41. m=m/2;
  42. return m;
  43. }; //zwraca liczbę krawędzi
  44.  
  45. int nodeCnt(){
  46. return n;
  47. }; //zwraca liczbę węzłów
  48.  
  49. void insertEdge(int u, int v){
  50. adjMatrix[u][v]=1;
  51. }; //wstawia krawędź
  52.  
  53. void deleteEdge(int u, int v){ //usuwa krawędź
  54. adjMatrix[u][v]=0;
  55. };
  56. bool check(int u, int v){
  57. if(adjMatrix[u][v]==0)
  58. return 0;
  59. else
  60. return 1;
  61. }; //sprawdza czy istnieje krawędź
  62.  
  63. void bfs(int s){
  64. int m=edgeCnt();
  65. int* odwiedzone = new int[m];
  66. for (int i = 0; i < m; ++i) {
  67. odwiedzone[i] = 0;
  68. }
  69. odwiedzone[s] = 1;
  70.  
  71. queue<int> kolejka;
  72. kolejka.push(s);
  73.  
  74. int aktualny;
  75. while (!kolejka.empty()){
  76. aktualny = kolejka.front();
  77. cout << aktualny << " ";
  78. for (int i = 0; i < n; ++i) {
  79. if (adjMatrix[aktualny][i] == 1 && odwiedzone[i] == 0) {
  80. odwiedzone[i] = 1;
  81. kolejka.push(i);
  82. }
  83. }
  84. kolejka.pop();
  85. }
  86. };
  87. //wyświetla węzły w porządku odwiedzenia
  88.  
  89.  
  90.  
  91.  
  92. void dfs(int s){
  93. int m=edgeCnt();
  94.  
  95. };
  96. //wyświetla węzły w porządku odwiedzenia
  97.  
  98.  
  99.  
  100.  
  101. friend ostream& operator<<(ostream& out, Graph& g){
  102. for(int i=0; i<g.nodeCnt();i++){
  103. for (int j=0; j<g.nodeCnt();j++){
  104. out << "["<<i<<"]"<<"["<<j<<"] "<<g.adjMatrix[i][j]<<endl;
  105. }
  106. }
  107.  
  108. };
  109. // ~Graph();
  110. //inne potrzebne/pomocnicze metody składowe
  111. };
  112.  
  113.  
  114. int main(int argc, char** argv) {
  115. int n = 10, m =14;
  116. edge undirectedConnectedGraph[]={{0,1}, {0,4}, {0,6}, {1,2}, {1,7}, {2,3}, {2,8}, {3,5}, {3,9}, {4,7}, {5,8}, {6,7}, {7,8}, {8,9}};
  117. Graph g(n,m,undirectedConnectedGraph);
  118. cout<<g;
  119. cout<<"BFS: ";
  120. g.bfs(0);
  121. cout<<"DFS: ";
  122. // g.dfs(0);
  123. /* int spr =g.edgeCnt();
  124. cout<<spr;*/
  125. return 0;
  126. }
  127.  
  128.  
  129.  
  130.  
  131.  
  132.  
  133. odwiedzone[v] = 1;
  134. cout << v << " ";
  135. for (int i = 0; i < N; ++i) {
  136. if (graf[v][i] == 1 && odwiedzone[i] == 0) {
  137. visit(i, odwiedzone, graf, N);
  138. }
  139. }
  140. void printDFS(int** graf, int N, int start) {
  141. int* odwiedzone = new int[N];
  142.  
  143. for (int i = 0; i < N; ++i) {
  144. odwiedzone[i] = 0;
  145. }
  146.  
  147. for (int i = 0; i < N; ++i) {
  148. if (odwiedzone[i] == 0) {
  149. visit(i, odwiedzone, graf, N);
  150. }
  151. }
  152.  
  153. cout << endl;
  154. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement