Advertisement
Guest User

Untitled

a guest
Jun 2nd, 2015
239
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.17 KB | None | 0 0
  1. #include<iostream>
  2. using namespace std;
  3.  
  4. const int n = 15; // 15 върха
  5.  
  6. struct link{
  7. char key;
  8. link *next;
  9. } *gr[n];
  10.  
  11. //1. Инициализация
  12. void init(link *gr[n])
  13. {
  14. for(int i = 0; i<n; i++)
  15. {
  16. gr[i] = NULL;
  17. }
  18. }
  19. //2. Търсене на връх
  20. bool search_node(link *gr[n], char c)
  21. {
  22. bool flag = false;
  23. for(int i = 0; i<n; i++)
  24. {
  25. if(gr[i])
  26. {
  27. if(gr[i]->key == c)
  28. {
  29. flag = true;
  30. }
  31. }
  32. }
  33. return flag;
  34. }
  35. //3. Търсене на дъга
  36. bool search_arc(link *gr[n], char c1, char c2)
  37. {
  38. bool flag=0;
  39. if (search_node(gr, c1) && search_node(gr, c2))
  40. {
  41. int i=0;
  42. while (gr[i]->key!=c1) i++;
  43. link *p=gr[i];
  44. while (p->key!=c2 && p->next!=NULL)
  45. p=p->next;
  46. if (p->key==c2) flag = true;
  47.  
  48. }
  49. return flag;
  50. }
  51. //4. Добавяне на връх
  52. void add_node(link *gr[n], char c)
  53. {
  54. if (search_node(gr, c))
  55. cout<<"\nExisting node!\n";
  56. else
  57. {
  58. int j=0;
  59. while (gr[j] && (j<n)) j++;
  60. if (gr[j]==NULL)
  61. {
  62. gr[j]=new link;
  63. gr[j]->key=c;
  64. gr[j]->next=NULL;
  65. }
  66. else
  67. cout<<"\nOverflow!\n";
  68. }
  69. }
  70. //5. Добавяне на дъга
  71. void add_arc(link *gr[n], char c1, char c2)
  72. {
  73. int i=0;
  74. link *p;
  75. if (search_arc(gr, c1, c2))
  76. {
  77. cout<<"\nExisting arc!";
  78. }
  79. else
  80. {
  81. if (!(search_node(gr, c1)))
  82. add_node(gr, c1);
  83. if (!(search_node(gr, c2)))
  84. add_node(gr, c2);
  85. while (gr[i]->key!=c1)
  86. i++;
  87. p=new link;
  88. p->key=c2;
  89. p->next=gr[i]->next;
  90. gr[i]->next=p;
  91. }
  92. }
  93. //Отпечатване на граф
  94. void list_node(link *gr[n])
  95. {
  96. cout<<"\n";
  97. for (int i=0; i<n; i++)
  98. if (gr[i])
  99. cout<<gr[i]->key;
  100. cout<<endl;
  101. }
  102. bool f(char c, link *gr[n]) // забележка функцията е от булев тип
  103. {
  104. bool is_have = false;
  105. for(int i = 0; i<n; i++)
  106. {
  107. if(gr[i] && gr[i]->key != c)
  108. {
  109. is_have = (search_arc(gr, c, gr[i]->key) && search_arc(gr, gr[i]->key, c));
  110. if(is_have)
  111. {
  112. break;
  113. }
  114. }
  115. }
  116. return is_have;
  117. }
  118. int main()
  119. {
  120. char c;
  121. char k;
  122. int ans;
  123. bool p = false;
  124. cout<<"Vavedete varhove na grafa"<<endl;
  125. do
  126. {
  127. cout<<"Menu"<<endl;
  128. cout<<"1 - Init"<<endl;
  129. cout<<"2 - Dobavyane na vrah"<<endl;
  130. cout<<"3 - Dobavyane na daga"<<endl;
  131. cout<<"4 - Otpechatvane na grafa"<<endl;
  132. cout<<"5 - Proverka dali ima vrazka ot tipa '->A<-'"<<endl;
  133. cout<<"6 - izhod"<<endl;
  134. cout<<"Vavedete svoya izbor"<<endl;
  135. cin>>ans;
  136. switch(ans)
  137. {
  138. case 1:
  139. {
  140. init(gr);
  141. break;
  142. }
  143. case 2:
  144. {
  145. cout<<"Vavedete stoynost na vrah ";
  146. cin>>c;
  147. cout<<endl;
  148. add_node(gr,c);
  149. break;
  150. }
  151. case 3:
  152. {
  153. cout<<"Vavedete parvia vrah ";
  154. cin>>c;
  155. cout<<endl<<"Vavedete vtoria vrah ";
  156. cin>>k;
  157. add_arc(gr, c,k);
  158. break;
  159. }
  160. case 4:
  161. {
  162. list_node(gr);
  163. break;
  164. }
  165. case 5:
  166. {
  167. for(int i = 0; i<n; i++)
  168. {
  169. if (gr[i])
  170. {
  171. c = gr[i]->key;
  172. p = f(c, gr); // флагът присвоява върнатото от ф-та
  173. if(p)
  174. {
  175. cout<<"===Da, ima takava vrazka==="<<endl;
  176. break;
  177. }
  178. }
  179. }
  180. if(!p)
  181. cout<<"===Ne, nqma takava vrazka==="<<endl;
  182. break;
  183. }
  184. }
  185. }while(ans!=6);
  186. return 0;
  187.  
  188.  
  189. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement