Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package komiwojazer;
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.Collections;
- import static java.util.Collections.shuffle;
- import java.util.Random;
- public class Komiwojazer
- {
- public static void main(String[] args)
- {
- String nazwa_miasta1 = "Białystok";
- String nazwa_miasta2 = "Warszawa";
- String nazwa_miasta3 = "Kraków";
- String nazwa_miasta4 = "Gdańsk";
- String nazwa_miasta5 = "Łódź";
- Miasto miasto1 = new Miasto(nazwa_miasta1);
- Miasto miasto2 = new Miasto(nazwa_miasta2);
- Miasto miasto3 = new Miasto(nazwa_miasta3);
- Miasto miasto4 = new Miasto(nazwa_miasta4);
- Miasto miasto5 = new Miasto(nazwa_miasta5);
- /*
- System.out.println("Zbiór miast: ");
- System.out.println("1. "+ miasto1.get_nazwa());
- System.out.println("2. "+ miasto2.get_nazwa());
- System.out.println("3. "+ miasto3.get_nazwa());
- System.out.println("4. "+ miasto4.get_nazwa());
- System.out.println("5. "+ miasto5.get_nazwa());
- */
- ArrayList<Miasto> listaMiast = new ArrayList<>();
- ArrayList<Integer> array = new ArrayList<>();
- array.addAll(Arrays.asList(0, 1, 2, 3, 4));
- listaMiast.addAll(Arrays.asList(miasto1, miasto2, miasto3, miasto4, miasto5));
- int miasta[][] = new int[listaMiast.size()][listaMiast.size()];
- double odleglosciMiast[][] = new double[listaMiast.size()][listaMiast.size()];
- double sumaOdleglosci[] = new double[listaMiast.size()];
- for (int i=0; i<listaMiast.size(); i++)
- {
- shuffle(array);
- for (int j=0; j<listaMiast.size(); j++)
- {
- miasta[i][j] = array.get(j);
- odleglosciMiast[i][j] = listaMiast.get(i).liczOdleglosc(listaMiast.get(j));
- }
- }
- /*
- for (int i=0; i<listaMiast.size(); i++)
- {
- for (int j=0; j<listaMiast.size(); j++)
- {
- System.out.print(odleglosciMiast[i][j] +"\t\t\t");
- }
- System.out.println("");
- }
- */
- //System.out.println("");
- for (int i=0; i<listaMiast.size(); i++)
- {
- for (int j=0; j<listaMiast.size(); j++)
- {
- System.out.print(miasta[i][j]+1 +" ");
- }
- System.out.println("");
- }
- System.out.println("");
- double odleglosc = 0;
- for (int i=0; i<listaMiast.size(); i++)
- {
- for (int j=0; j<listaMiast.size(); j++)
- {
- if (j < listaMiast.size()-1)
- {
- odleglosc += odleglosciMiast[miasta[i][j]][miasta[i][j+1]];
- }
- else
- {
- odleglosc += odleglosciMiast[miasta[i][j]][miasta[i][0]];
- }
- }
- sumaOdleglosci[i] = odleglosc;
- odleglosc = 0;
- }
- /*
- System.out.println("Odległości miast:");
- for (int i=0; i<listaMiast.size(); i++)
- {
- System.out.format("%.2f\n", sumaOdleglosci[i]);
- }
- */
- ArrayList<Integer> rodzic1 = new ArrayList<>();
- ArrayList<Integer> rodzic2 = new ArrayList<>();
- ArrayList<Integer> potomek1 = new ArrayList<>();
- ArrayList<Integer> potomek2 = new ArrayList<>();
- ArrayList<Integer> tmp1 = new ArrayList<>();
- ArrayList<Integer> tmp2 = new ArrayList<>();
- Random rand = new Random();
- int pktPrzeciecia1 = 3;
- int pktPrzeciecia2 = 7;
- rodzic1.addAll(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9));
- rodzic2.addAll(Arrays.asList(4, 5, 2, 1, 8, 7, 6, 9, 3));
- System.out.println("Zakres od " +pktPrzeciecia1 +" do " +pktPrzeciecia2);
- System.out.println("Ciąg 1: "+pktPrzeciecia1);
- System.out.println("Ciąg 2: "+pktPrzeciecia2);
- System.out.println("Podzielone ciągi: ");
- //Wypisanie rodzic1
- for (int i=0; i<rodzic1.size(); i++)
- {
- if (i == pktPrzeciecia1)
- {
- System.out.print("|");
- }
- if (i == pktPrzeciecia2)
- {
- System.out.print("|");
- }
- System.out.print(rodzic1.get(i) +" ");
- }
- System.out.println("");
- //Wypisanie rodzic2
- for (int i=0; i<rodzic2.size(); i++)
- {
- if (i == pktPrzeciecia1)
- {
- System.out.print("|");
- }
- if (i == pktPrzeciecia2)
- {
- System.out.print("|");
- }
- System.out.print(rodzic2.get(i) +" ");
- }
- System.out.println("");
- //Etap 1
- //Dodanie srodkow rodzicow do potomkow
- for (int i=pktPrzeciecia1; i<pktPrzeciecia2; i++)
- {
- potomek1.add(rodzic2.get(i));
- potomek2.add(rodzic1.get(i));
- tmp1.add(rodzic2.get(i));
- tmp2.add(rodzic1.get(i));
- }
- //Etap 2 i 3 dla cyfr po lewej stronie pkt przeciecia 1
- for (int i=0; i<pktPrzeciecia1; i++)
- {
- //Sprawdzenie czy potomek 1 nie posiada cyfr z rodzica1
- //Etap 2. - jesli posiada
- if(!potomek1.contains(rodzic1.get(i)))
- {
- potomek1.add(i, rodzic1.get(i));
- }
- //Etap 3. - jesli nie posiada
- else
- {
- for (int j=0; j<tmp1.size(); j++)
- {
- if (rodzic1.get(i) == tmp1.get(j))
- {
- potomek1.add(i, tmp2.get(j));
- }
- }
- }
- //Sprawdzenie czy potomek 2 nie posiada cyfr z rodzica1
- //Etap 2. - jesli posiada
- if (!potomek2.contains(rodzic2.get(i)))
- {
- potomek2.add(i, rodzic2.get(i));
- }
- //Etap 3. - jesli nie posiada
- else
- {
- for (int j=0;j< tmp1.size(); j++)
- {
- if (rodzic2.get(i) == tmp2.get(j))
- {
- potomek2.add(i, tmp1.get(j));
- }
- }
- }
- }
- //Etap 2 i 3 dla cyfr po prawej stronie pkt przeciecia 2
- for (int i=pktPrzeciecia2; i<rodzic1.size(); i++)
- {
- //Sprawdzenie czy potomek 1 nie posiada cyfr z rodzica1
- //Etap 2. - jesli posiada
- if (!potomek1.contains(rodzic1.get(i)))
- {
- potomek1.add(i, rodzic1.get(i));
- }
- //Etap 3. - jesli nie posiada
- else
- {
- for (int j=0; j<tmp1.size(); j++)
- {
- if (rodzic1.get(i) == tmp1.get(j))
- {
- potomek1.add(i, tmp2.get(j));
- }
- }
- }
- //Sprawdzenie czy potomek 2 nie posiada cyfr z rodzica1
- //Etap 2. - jesli posiada
- if (!potomek2.contains(rodzic2.get(i)))
- {
- potomek2.add(i, rodzic2.get(i));
- }
- //Etap 3. - jesli nie posiada
- else
- {
- for (int j=0; j<tmp1.size(); j++)
- {
- if (rodzic2.get(i) == tmp2.get(j))
- {
- potomek2.add(i, tmp1.get(j));
- }
- }
- }
- }
- System.out.println("Potomek 1: "+ potomek1);
- System.out.println("Potomek 2: "+ potomek2);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement