Advertisement
Guest User

Untitled

a guest
Jan 16th, 2019
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.16 KB | None | 0 0
  1. package komiwojazer;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.Arrays;
  5. import java.util.Collections;
  6. import static java.util.Collections.shuffle;
  7. import java.util.Random;
  8.  
  9. public class Komiwojazer
  10. {
  11. public static void main(String[] args)
  12. {
  13. String nazwa_miasta1 = "Białystok";
  14. String nazwa_miasta2 = "Warszawa";
  15. String nazwa_miasta3 = "Kraków";
  16. String nazwa_miasta4 = "Gdańsk";
  17. String nazwa_miasta5 = "Łódź";
  18.  
  19. Miasto miasto1 = new Miasto(nazwa_miasta1);
  20. Miasto miasto2 = new Miasto(nazwa_miasta2);
  21. Miasto miasto3 = new Miasto(nazwa_miasta3);
  22. Miasto miasto4 = new Miasto(nazwa_miasta4);
  23. Miasto miasto5 = new Miasto(nazwa_miasta5);
  24. /*
  25. System.out.println("Zbiór miast: ");
  26. System.out.println("1. "+ miasto1.get_nazwa());
  27. System.out.println("2. "+ miasto2.get_nazwa());
  28. System.out.println("3. "+ miasto3.get_nazwa());
  29. System.out.println("4. "+ miasto4.get_nazwa());
  30. System.out.println("5. "+ miasto5.get_nazwa());
  31. */
  32. ArrayList<Miasto> listaMiast = new ArrayList<>();
  33. ArrayList<Integer> array = new ArrayList<>();
  34.  
  35. array.addAll(Arrays.asList(0, 1, 2, 3, 4));
  36.  
  37. listaMiast.addAll(Arrays.asList(miasto1, miasto2, miasto3, miasto4, miasto5));
  38.  
  39. int miasta[][] = new int[listaMiast.size()][listaMiast.size()];
  40. double odleglosciMiast[][] = new double[listaMiast.size()][listaMiast.size()];
  41. double sumaOdleglosci[] = new double[listaMiast.size()];
  42.  
  43. for (int i=0; i<listaMiast.size(); i++)
  44. {
  45. shuffle(array);
  46.  
  47. for (int j=0; j<listaMiast.size(); j++)
  48. {
  49. miasta[i][j] = array.get(j);
  50. odleglosciMiast[i][j] = listaMiast.get(i).liczOdleglosc(listaMiast.get(j));
  51. }
  52. }
  53.  
  54. /*
  55. for (int i=0; i<listaMiast.size(); i++)
  56. {
  57. for (int j=0; j<listaMiast.size(); j++)
  58. {
  59. System.out.print(odleglosciMiast[i][j] +"\t\t\t");
  60. }
  61. System.out.println("");
  62. }
  63. */
  64.  
  65. //System.out.println("");
  66.  
  67. for (int i=0; i<listaMiast.size(); i++)
  68. {
  69. for (int j=0; j<listaMiast.size(); j++)
  70. {
  71. System.out.print(miasta[i][j]+1 +" ");
  72. }
  73. System.out.println("");
  74. }
  75.  
  76. System.out.println("");
  77.  
  78. double odleglosc = 0;
  79.  
  80. for (int i=0; i<listaMiast.size(); i++)
  81. {
  82. for (int j=0; j<listaMiast.size(); j++)
  83. {
  84. if (j < listaMiast.size()-1)
  85. {
  86. odleglosc += odleglosciMiast[miasta[i][j]][miasta[i][j+1]];
  87. }
  88.  
  89. else
  90. {
  91. odleglosc += odleglosciMiast[miasta[i][j]][miasta[i][0]];
  92. }
  93. }
  94.  
  95. sumaOdleglosci[i] = odleglosc;
  96.  
  97. odleglosc = 0;
  98. }
  99. /*
  100. System.out.println("Odległości miast:");
  101.  
  102. for (int i=0; i<listaMiast.size(); i++)
  103. {
  104. System.out.format("%.2f\n", sumaOdleglosci[i]);
  105. }
  106. */
  107.  
  108. ArrayList<Integer> rodzic1 = new ArrayList<>();
  109. ArrayList<Integer> rodzic2 = new ArrayList<>();
  110.  
  111. ArrayList<Integer> potomek1 = new ArrayList<>();
  112. ArrayList<Integer> potomek2 = new ArrayList<>();
  113.  
  114. ArrayList<Integer> tmp1 = new ArrayList<>();
  115. ArrayList<Integer> tmp2 = new ArrayList<>();
  116.  
  117. Random rand = new Random();
  118.  
  119. int pktPrzeciecia1 = 3;
  120. int pktPrzeciecia2 = 7;
  121.  
  122. rodzic1.addAll(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9));
  123. rodzic2.addAll(Arrays.asList(4, 5, 2, 1, 8, 7, 6, 9, 3));
  124.  
  125. System.out.println("Zakres od " +pktPrzeciecia1 +" do " +pktPrzeciecia2);
  126. System.out.println("Ciąg 1: "+pktPrzeciecia1);
  127. System.out.println("Ciąg 2: "+pktPrzeciecia2);
  128. System.out.println("Podzielone ciągi: ");
  129.  
  130. //Wypisanie rodzic1
  131. for (int i=0; i<rodzic1.size(); i++)
  132. {
  133. if (i == pktPrzeciecia1)
  134. {
  135. System.out.print("|");
  136. }
  137.  
  138. if (i == pktPrzeciecia2)
  139. {
  140. System.out.print("|");
  141. }
  142.  
  143. System.out.print(rodzic1.get(i) +" ");
  144. }
  145.  
  146. System.out.println("");
  147.  
  148. //Wypisanie rodzic2
  149. for (int i=0; i<rodzic2.size(); i++)
  150. {
  151. if (i == pktPrzeciecia1)
  152. {
  153. System.out.print("|");
  154. }
  155.  
  156. if (i == pktPrzeciecia2)
  157. {
  158. System.out.print("|");
  159. }
  160.  
  161. System.out.print(rodzic2.get(i) +" ");
  162. }
  163.  
  164. System.out.println("");
  165.  
  166. //Etap 1
  167. //Dodanie srodkow rodzicow do potomkow
  168. for (int i=pktPrzeciecia1; i<pktPrzeciecia2; i++)
  169. {
  170. potomek1.add(rodzic2.get(i));
  171. potomek2.add(rodzic1.get(i));
  172.  
  173. tmp1.add(rodzic2.get(i));
  174. tmp2.add(rodzic1.get(i));
  175. }
  176.  
  177. //Etap 2 i 3 dla cyfr po lewej stronie pkt przeciecia 1
  178. for (int i=0; i<pktPrzeciecia1; i++)
  179. {
  180. //Sprawdzenie czy potomek 1 nie posiada cyfr z rodzica1
  181. //Etap 2. - jesli posiada
  182. if(!potomek1.contains(rodzic1.get(i)))
  183. {
  184. potomek1.add(i, rodzic1.get(i));
  185. }
  186.  
  187. //Etap 3. - jesli nie posiada
  188. else
  189. {
  190. for (int j=0; j<tmp1.size(); j++)
  191. {
  192. if (rodzic1.get(i) == tmp1.get(j))
  193. {
  194. potomek1.add(i, tmp2.get(j));
  195. }
  196. }
  197. }
  198.  
  199. //Sprawdzenie czy potomek 2 nie posiada cyfr z rodzica1
  200. //Etap 2. - jesli posiada
  201. if (!potomek2.contains(rodzic2.get(i)))
  202. {
  203. potomek2.add(i, rodzic2.get(i));
  204. }
  205.  
  206. //Etap 3. - jesli nie posiada
  207. else
  208. {
  209. for (int j=0;j< tmp1.size(); j++)
  210. {
  211. if (rodzic2.get(i) == tmp2.get(j))
  212. {
  213. potomek2.add(i, tmp1.get(j));
  214. }
  215. }
  216. }
  217. }
  218.  
  219. //Etap 2 i 3 dla cyfr po prawej stronie pkt przeciecia 2
  220. for (int i=pktPrzeciecia2; i<rodzic1.size(); i++)
  221. {
  222. //Sprawdzenie czy potomek 1 nie posiada cyfr z rodzica1
  223. //Etap 2. - jesli posiada
  224. if (!potomek1.contains(rodzic1.get(i)))
  225. {
  226. potomek1.add(i, rodzic1.get(i));
  227. }
  228.  
  229. //Etap 3. - jesli nie posiada
  230. else
  231. {
  232. for (int j=0; j<tmp1.size(); j++)
  233. {
  234. if (rodzic1.get(i) == tmp1.get(j))
  235. {
  236. potomek1.add(i, tmp2.get(j));
  237. }
  238. }
  239. }
  240.  
  241. //Sprawdzenie czy potomek 2 nie posiada cyfr z rodzica1
  242. //Etap 2. - jesli posiada
  243. if (!potomek2.contains(rodzic2.get(i)))
  244. {
  245. potomek2.add(i, rodzic2.get(i));
  246. }
  247.  
  248. //Etap 3. - jesli nie posiada
  249. else
  250. {
  251. for (int j=0; j<tmp1.size(); j++)
  252. {
  253. if (rodzic2.get(i) == tmp2.get(j))
  254. {
  255. potomek2.add(i, tmp1.get(j));
  256. }
  257. }
  258. }
  259. }
  260.  
  261. System.out.println("Potomek 1: "+ potomek1);
  262. System.out.println("Potomek 2: "+ potomek2);
  263.  
  264. }
  265. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement