Advertisement
Guest User

Untitled

a guest
Jan 16th, 2018
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.73 KB | None | 0 0
  1. %s = [ 1 1 2 2 3 4 5 6 8 14 10 9 1 4 8 12 10 13 12] ; % polaczenia miedzy wierzchołkami
  2. %t = [ 8 3 5 9 6 7 7 2 5 10 9 6 11 11 11 3 13 14 14];
  3.  
  4. s=[1 1 2 2 3 4 4 5 5 6 6 7 7 8 9 9 10 11 12];
  5. t=[2 3 4 5 6 3 8 7 12 9 10 8 13 14 11 13 11 12 14];
  6.  
  7. dlugosc = length(s);
  8. weights = randi(5,dlugosc,1)+2;
  9.  
  10. G = graph(s,t,weights) % tworzenie i rysowanie grafu
  11. h = plot(G,'EdgeLabel',G.Edges.Weight)
  12. f = degree(G); % maciez ktora trzyma ile kazdy wierzcholek ma polaczen
  13. G1=G;
  14. koniec=0;
  15. m=1;
  16. a=0;
  17. wierzcholki = numnodes(G);
  18.  
  19. for k = 1 : wierzcholki
  20. odwiedzone(k)=f(k);% szukamy tych co maja nieparzysta ilosc krawedzi
  21. if (rem( f(k), 2 ) == 1 ) % a zawiera numery wierzcholkow ktore sa nieparzyste
  22. a(m) = k;
  23. odwiedzone(k)=odwiedzone(k)+10;
  24. m = m+1 ;
  25. end
  26.  
  27.  
  28. end
  29. min=10000;
  30. brutemin = 10000;
  31.  
  32. n = length(a);
  33.  
  34. for i = 1:100*n
  35. force = randperm(n,n);
  36.  
  37. [path1,d1] = shortestpath(G,a(force(1)),a(force(2)));
  38. [path2,d2] = shortestpath(G,a(force(3)),a(force(4)));
  39. [path3,d3] = shortestpath(G,a(force(5)),a(force(6)));
  40. [path4,d4] = shortestpath(G,a(force(7)),a(force(8)));
  41. [path5,d5] = shortestpath(G,a(force(9)),a(force(10)));
  42.  
  43. brutemin = length(path1)+length(path2)+length(path2)+length(path2)+length(path2);
  44. min1 = d5+d4+d3+d2+d1;
  45. if(min1+brutemin<min+brutemin)
  46. min=min1;
  47. pathSecond1=path1;
  48. pathSecond2=path2;
  49. pathSecond3=path3;
  50. pathSecond4=path4;
  51. pathSecond5=path5;
  52. end
  53.  
  54. end
  55. pathSecond1R=fliplr(pathSecond1);
  56. pathSecond2R=fliplr(pathSecond2);
  57. pathSecond3R=fliplr(pathSecond3);
  58. pathSecond4R=fliplr(pathSecond4);
  59. pathSecond5R=fliplr(pathSecond5);
  60.  
  61. highlight(h,pathSecond1,'NodeColor','g','EdgeColor','g','LineWidth',2)
  62. highlight(h,pathSecond2,'NodeColor','g','EdgeColor','g','LineWidth',2)
  63. highlight(h,pathSecond3,'NodeColor','g','EdgeColor','g','LineWidth',2)
  64. highlight(h,pathSecond4,'NodeColor','g','EdgeColor','g','LineWidth',2)
  65. highlight(h,pathSecond5,'NodeColor','g','EdgeColor','g','LineWidth',2)
  66.  
  67. if(length(a)==10)
  68.  
  69. %start = randi(wierzcholki);
  70. start = 1;
  71. highlight(h,start,'NodeColor','red')
  72. % path= shortestpath(G,a(1),a(2));
  73.  
  74.  
  75.  
  76. index = 1;
  77. v = start; % pozniej v = start;
  78.  
  79. while(numedges(G1)>1) % dopóki g1 ma krawedzie
  80. next= neighbors(G1,v)
  81. if(length(neighbors(G1,start))==1) % sprawdzamy droge ktora ma byc ostatnia do przejscia
  82. last = neighbors(G1,start);
  83. koniec = shortestpath(G,last,start);
  84. end
  85.  
  86.  
  87. path = shortestpath(G,v,next(index) ); % to idziemy do niego
  88.  
  89. unusual=0; %% czy to niezwykla droga
  90. if(isequal(path,pathSecond1) ||isequal(path,pathSecond1R))
  91. unusual=1;
  92. end
  93. if(isequal(path,pathSecond2) ||isequal(path,pathSecond2R))
  94. unusual=1;
  95. end
  96. if(isequal(path,pathSecond3) ||isequal(path,pathSecond3R))
  97. unusual=1;
  98. end
  99. if(isequal(path,pathSecond4) ||isequal(path,pathSecond4R))
  100. unusual=1;
  101. end
  102. if(isequal(path,pathSecond5) ||isequal(path,pathSecond5R))
  103. unusual=1;
  104. end
  105.  
  106.  
  107.  
  108.  
  109.  
  110.  
  111. if(unusual==0) %%%%%% jezeli to zwykla krawedz to idziemy raz
  112. if(path == koniec)
  113. index=index+1;
  114. else
  115. G1 = rmedge(G1,v,next(index))
  116. pause(0.5)
  117. highlight(h,path,'EdgeColor','r','LineWidth',2)
  118. v=next(index);
  119. index=1
  120. end
  121.  
  122. else % jezeli nie jest zwykla to dwa razy
  123. if(length(path)==2)
  124. pause(0.5)
  125. highlight(h,path,'EdgeColor','r','LineWidth',2)
  126. pause(0.5)
  127. highlight(h,path,'EdgeColor','b','LineWidth',2)
  128. G1 = rmedge(G1,v,next(index));
  129. else
  130. for i = 1 : (length(path)-1)
  131. path2 =shortestpath(G,path(i),path(i+1))
  132. pause(0.5)
  133. highlight(h,path2,'EdgeColor','r','LineWidth',2)
  134. end
  135. for i = 1 : (length(path)-1)
  136. path2 =shortestpath(G,path(length(path)+1-i),path(length(path)-i))
  137. pause(0.5)
  138. highlight(h,path2,'EdgeColor','b','LineWidth',2)
  139. G1 = rmedge(G1,path(length(path)+1-i),path(length(path)-i));
  140. end
  141. end
  142.  
  143. end
  144.  
  145. end
  146.  
  147. if(numedges(G1)==1)
  148. G1 = rmedge(G1,last,start);
  149. pause(0.5)
  150. highlight(h,koniec,'EdgeColor','r','LineWidth',2)
  151. end
  152.  
  153.  
  154. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement