Advertisement
Guest User

Untitled

a guest
Nov 19th, 2019
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.16 KB | None | 0 0
  1. #define NRMAXNODURI 64
  2. #include <stdio.h>
  3.  
  4. typedef struct
  5. {
  6. int nrNoduri;
  7. char tabChei[NRMAXNODURI];
  8. int tabVizitat[NRMAXNODURI];
  9. char matAdiacenta[NRMAXNODURI][NRMAXNODURI];
  10. }Graf;
  11.  
  12. typedef struct
  13. {
  14. int nrElemente;
  15. int tabElemente[NRMAXNODURI];
  16. } Coada;
  17.  
  18. void initializare(Graf &g)
  19. {
  20. int i,j;
  21. g.nrNoduri=0;
  22. for (i=0;i<NRMAXNODURI;i++)
  23. {
  24. g.tabChei[i]=0;
  25. g.tabVizitat[i]=0;
  26. }
  27. for (i=0;i<NRMAXNODURI;i++)
  28. {
  29. for(j=0;j<NRMAXNODURI;j++)
  30. {
  31. g.matAdiacenta[i][j]=0;
  32. }
  33. }
  34. }
  35.  
  36. void reinitializare(Graf &g)
  37. {
  38. int i;
  39. for (i=0;i<NRMAXNODURI;i++)
  40. {
  41. g.tabVizitat[i]=0;
  42. }
  43. }
  44.  
  45. void afisare(Graf g)
  46. {
  47. int i,j;
  48. printf("\nLista de chei;\n");
  49. for (i=0;i<g.nrNoduri;i++)
  50. {
  51. printf("%c ",g.tabChei[i]);
  52. }
  53. printf("\nMatricea de adiacenta:\n");
  54. for (i=0;i<g.nrNoduri;i++)
  55. {
  56. for(j=0;j<g.nrNoduri;j++)
  57. {
  58. printf("%d ",g.matAdiacenta[i][j]);
  59. }
  60. printf("\n");
  61. }
  62. }
  63. void adaugaNod(Graf &g,char cheie)
  64. {
  65. g.tabChei[g.nrNoduri]=cheie;
  66. g.nrNoduri++;
  67. }
  68. void adaugaArc(Graf &g,int index1,int index2)
  69. {
  70. g.matAdiacenta[index1][index2]=1;
  71. g.matAdiacenta[index2][index1]=1;
  72. }
  73.  
  74. void stergereArc(Graf &g,int index1,int index2)
  75. {
  76. g.matAdiacenta[index1][index2]=0;
  77. g.matAdiacenta[index2][index1]=0;
  78. }
  79. void traverseazaInAdancime2(Graf &g,int indexNod)
  80. {
  81. int i;
  82. if (!g.tabVizitat[indexNod])
  83. {
  84. printf("%c ",g.tabChei[indexNod]);
  85. g.tabVizitat[indexNod]=1;
  86. for (i=0;i<g.nrNoduri;i++)
  87. {
  88. if (g.matAdiacenta[indexNod][i])
  89. {
  90. traverseazaInAdancime2(g,i);
  91. }
  92. }
  93. }
  94. }
  95.  
  96. void traverseazaInAdancime(Graf g)
  97. {
  98.  
  99. int i;
  100. printf("\nTraversare in adancime:\n");
  101. for (i=0;i<g.nrNoduri;i++)
  102. {
  103. if (g.tabVizitat[i]==0)
  104. {
  105.  
  106. traverseazaInAdancime2(g,i);
  107. printf("\n");
  108.  
  109. }
  110. }
  111. printf("\n");
  112. }
  113.  
  114. void initializare(Coada &coada)
  115. {
  116. int i;
  117. for (i=0;i<NRMAXNODURI;i++)
  118. {
  119. coada.tabElemente[i]=-1;
  120. }
  121. coada.nrElemente=0;
  122. }
  123.  
  124. void adauga(Coada &coada,int indexNod)
  125. {
  126. //printf("Adauga %d\n", indexNod);
  127. coada.tabElemente[coada.nrElemente++]=indexNod;
  128. }
  129. int scoate(Coada &coada)
  130. {
  131. int i;
  132. int indexNod=coada.tabElemente[0];
  133. for (i=0;i<coada.nrElemente;i++)
  134. {
  135. coada.tabElemente[i]=coada.tabElemente[i+1];
  136. }
  137. coada.nrElemente--;
  138. //printf("Scoatem %d\n", indexNod);
  139. return indexNod;
  140. }
  141.  
  142. int vida(Coada coada)
  143. {
  144. return coada.nrElemente==0;
  145.  
  146. }
  147.  
  148. void traverseazaPrinCuprindere2(Graf &g, int indexNod)
  149. {
  150. int i;
  151. Coada coada;
  152. initializare(coada);
  153.  
  154. adauga(coada,indexNod);
  155. g.tabVizitat[indexNod]=1;
  156. do
  157. {
  158. indexNod=scoate(coada);
  159. printf("%c ",g.tabChei[indexNod]);
  160. for (i=0;i<g.nrNoduri;i++)
  161. {
  162. if (g.matAdiacenta[indexNod][i] && !(g.tabVizitat[i]))
  163. {
  164. g.tabVizitat[i]=1;
  165. adauga(coada,i);
  166. }
  167. }
  168. }
  169. while (!vida(coada));
  170. }
  171.  
  172. void traverseazaPrinCuprindere(Graf g)
  173. {
  174. int i;
  175. printf("\nTraversare prind cuprindere:\n");
  176. for (i=0;i<g.nrNoduri;i++)
  177. {
  178. if (g.tabVizitat[i]==0)
  179. {
  180. traverseazaPrinCuprindere2(g,i);
  181. printf("\n");
  182. }
  183. }
  184. printf("\n");
  185. }
  186.  
  187. int main()
  188. {
  189. Graf g;
  190. initializare(g);
  191.  
  192. adaugaNod(g,'A');
  193. adaugaNod(g,'B');
  194. adaugaNod(g,'C');
  195. adaugaNod(g,'D');
  196.  
  197. adaugaNod(g,'E');
  198. adaugaNod(g,'F');
  199. adaugaNod(g,'G');
  200. adaugaNod(g,'H');
  201. adaugaNod(g,'I');
  202. adaugaNod(g,'J');
  203. adaugaNod(g,'K');
  204. adaugaNod(g,'L');
  205. adaugaNod(g,'M');
  206.  
  207. adaugaArc(g,0,1);
  208. adaugaArc(g,0,2);
  209. adaugaArc(g,0,3);
  210. adaugaArc(g,0,4);
  211.  
  212. adaugaArc(g,1,2);
  213. adaugaArc(g,1,3);
  214. adaugaArc(g,2,3);
  215. adaugaArc(g,4,5);
  216. adaugaArc(g,5,6);
  217. adaugaArc(g,7,8);
  218. adaugaArc(g,9,10);
  219. adaugaArc(g,11,12);
  220. traverseazaInAdancime(g);
  221.  
  222. reinitializare(g);
  223. traverseazaPrinCuprindere(g);
  224. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement