Advertisement
Guest User

Untitled

a guest
Nov 19th, 2019
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.17 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 adugaArc(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.  
  85. printf("%c ",g.tabChei[indexNod]);
  86. g.tabVizitat[indexNod]=1;
  87. for (i=0;i<g.nrNoduri;i++)
  88. {
  89. if (g.matAdiancenta[indexNod][i])
  90. {
  91. traverseazaInAdancime2(g,i);
  92. }
  93. }
  94. }
  95. }
  96.  
  97. void traverseazaInAdancime(Graf g)
  98. {
  99.  
  100. int i;
  101. printf("\nTraversare in adancime:\n");
  102. for (i=0;i<g.nrNoduri;i++)
  103. {
  104. if (g.tabVizitat[i]==0)
  105. {
  106.  
  107. traverseazaInAdancime2(g,i);
  108. printf("\n");
  109.  
  110. }
  111. }
  112. printf("\n");
  113. }
  114.  
  115. void initializare(Coada &coada)
  116. {
  117. int i;
  118. for (i=0;i<NRMAXNODURI;i++)
  119. {
  120. coada.tabElemente[i]=-1;
  121. }
  122. coada.nrElemente=0;
  123. }
  124.  
  125. void adauga(Coada &coada,int indexNod)
  126. {
  127. //printf("Adauga %d\n", indexNod);
  128. coada.tabelemente[coada.nrElemente++]=indexNod;
  129. }
  130. int scoate(Coada &coada)
  131. {
  132.  
  133. int i;
  134. int indexNod=coada.tabElemente[0];
  135. for (i=0;i<coada.nrElemente;i++)
  136. {
  137. coada.tabElemente[i]=coada.tabelemente[i+1];
  138. }
  139. coada.nrElemente--;
  140. //printf("Scoatem %d\n", indexNod);
  141. return indexNod;
  142. }
  143.  
  144. int vida(Coada coada)
  145. {
  146. return coada.nrElemente==0;
  147.  
  148. }
  149.  
  150. void traverseazaPrinCuprindere2(Graf &g, int indexNod)
  151. {
  152. int i;
  153. Coada coada;
  154. initializare(coada);
  155.  
  156. adauga(coada,indexNod);
  157. g.tabVizitat[indexNod]=1;
  158. do
  159. {
  160. indexNod=scoate(coada);
  161. printf("%c ",g.tabChei[indexNod]);
  162. for (i=0;i<g.nrNoduri;i++)
  163. {
  164. if (g.matAdiancenta[indexNod][i] && !(g.tabVizitat[i]))
  165. {
  166. g.tabVizitat[i]=1;
  167. adauga(coada,i);
  168. }
  169. }
  170. }
  171. while (!vida(coada));
  172. }
  173.  
  174. void traverseazaPrinCuprindere(Graf g)
  175. {
  176. int i;
  177. printf("\nTraversare prind cuprindere:\n");
  178. for (i=0;i<g.nrNoduri;i++)
  179. {
  180. if (g.tabVizitat[i]==0)
  181. {
  182. traverseazaPrinCuprindere2(g,i);
  183. printf("\n");
  184. }
  185. }
  186. printf("\n");
  187. }
  188.  
  189. int main()
  190. {
  191. Graf g;
  192. initializare(g);
  193.  
  194. adaugaNod(g,'A');
  195. adaugaNod(g,'B');
  196. adaugaNod(g,'C');
  197. adaugaNod(g,'D');
  198. adaugaNod(g,'E');
  199. adaugaNod(g,'F');
  200. adaugaNod(g,'G');
  201. adaugaNod(g,'H');
  202. adaugaNod(g,'I');
  203. adaugaNod(g,'J');
  204. adaugaNod(g,'K');
  205. adaugaNod(g,'L');
  206. adaugaNod(g,'M');
  207.  
  208. adaugaArc(g,0,1);
  209. adaugaArc(g,0,2);
  210. adaugaArc(g,0,3);
  211. adaugaArc(g,0,4);
  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