Advertisement
varden

SRPP - CityDivider

Dec 7th, 2014
206
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.06 KB | None | 0 0
  1. /*
  2.  * To change this license header, choose License Headers in Project Properties.
  3.  * To change this template file, choose Tools | Templates
  4.  * and open the template in the editor.
  5.  */
  6. package CityDivision;
  7.  
  8. import CityDivision.City.CityXComparator;
  9. import CityDivision.City.CityYComparator;
  10. import java.io.BufferedReader;
  11. import java.io.File;
  12. import java.io.FileReader;
  13. import java.io.IOException;
  14. import static java.lang.Math.floor;
  15. import java.util.ArrayList;
  16. import java.util.Collections;
  17.  
  18. /**
  19.  *
  20.  * @author Varden
  21.  */
  22. public class CityDivider {
  23.  
  24.     int numberOfCitiesInGroup;
  25.     City warehouse;
  26.     ArrayList<City> cities = new ArrayList();
  27.     ArrayList<ArrayList<City>> dividedCities = new ArrayList();
  28.  
  29.     public int getNumberOfCitiesInGroup() {
  30.         return numberOfCitiesInGroup;
  31.     }
  32.  
  33.     public ArrayList<City> getCities() {
  34.         return cities;
  35.     }
  36.  
  37.     public ArrayList<ArrayList<City>> getDividedCities() {
  38.         return dividedCities;
  39.     }
  40.  
  41.     private void recurrenceDivision(ArrayList<City> cities, int numberOfCitiesInGroup) {
  42.  
  43.         if (cities.size() <= numberOfCitiesInGroup) {
  44.             dividedCities.add(cities);
  45.         } else {
  46.             int minX, maxX, minY, maxY;
  47.             minX = cities.get(0).x;
  48.             maxX = cities.get(0).x;
  49.             minY = cities.get(0).y;
  50.             maxY = cities.get(0).y;
  51.  
  52.             for (City city : cities) {
  53.                 if (city.x < minX) {
  54.                     minX = city.x;
  55.                 } else if (city.x > maxX) {
  56.                     maxX = city.x;
  57.                 }
  58.                 if (city.y < minY) {
  59.                     minY = city.y;
  60.                 } else if (city.y > maxY) {
  61.                     maxY = city.y;
  62.                 }
  63.             }
  64.  
  65.             int spanX = maxX - minX;
  66.             int spanY = maxY - minY;
  67.             if (spanX > spanY) {
  68.                 Collections.sort(cities, new CityXComparator());
  69.             } else {
  70.                 Collections.sort(cities, new CityYComparator());
  71.             }
  72.  
  73.             int remainder = cities.size() % numberOfCitiesInGroup;
  74.             int numberOfGroups = (cities.size() - remainder) / numberOfCitiesInGroup;
  75.             if (remainder != 0) {
  76.                 numberOfGroups++;
  77.             }
  78.  
  79.             ArrayList<City> part1 = new ArrayList();
  80.             ArrayList<City> part2 = new ArrayList();
  81.             int i = 0;
  82.  
  83.             for (City city : cities) {
  84.                 if (i < floor(numberOfGroups / 2) * numberOfCitiesInGroup) {
  85.                     part1.add(city);
  86.                 } else {
  87.                     part2.add(city);
  88.                 }
  89.                 i++;
  90.             }
  91.  
  92.             recurrenceDivision(part1, numberOfCitiesInGroup);
  93.             recurrenceDivision(part2, numberOfCitiesInGroup);
  94.         }
  95.     }
  96.  
  97.     public void divideCitiesToGroups() {
  98.         recurrenceDivision(cities, numberOfCitiesInGroup);
  99.         addWarehouseToGroups();
  100.     }
  101.  
  102.     public void loadDataFromTextFile(String filePath) {
  103.         try {
  104.             File file = new File(filePath);
  105.             FileReader fileReader = new FileReader(file);
  106.             BufferedReader bufferedReader = new BufferedReader(fileReader);
  107.             StringBuffer stringBuffer = new StringBuffer();
  108.             String line;
  109.            
  110.             //pobierz k
  111.             if ((line = bufferedReader.readLine()) != null) {
  112.                 numberOfCitiesInGroup = Integer.parseInt(line);
  113.             }
  114.            
  115.             //pobierz magazyn                        
  116.             if ((line = bufferedReader.readLine()) != null) {
  117.                 String[] coordinates = line.split(" ");
  118.                 warehouse = new City(Integer.parseInt(coordinates[0]), Integer.parseInt(coordinates[1]));
  119.             }
  120.  
  121.             //pobierz pozostałe miasta
  122.             while ((line = bufferedReader.readLine()) != null) {
  123.                 String[] coordinates = line.split(" ");
  124.                 City city = new City(Integer.parseInt(coordinates[0]), Integer.parseInt(coordinates[1]));
  125.                 cities.add(city);
  126.             }
  127.             fileReader.close();
  128.  
  129.         } catch (IOException e) {
  130.             e.printStackTrace();
  131.         }
  132.     }
  133.  
  134.     public void printGroups() {
  135.         System.out.println("Warehouse: ");
  136.         System.out.print(warehouse.x);
  137.         System.out.print("\t");
  138.         System.out.println(warehouse.y);
  139.         System.out.println();
  140.  
  141.         for (ArrayList<City> cityGroup : dividedCities) {
  142.             for (City city : cityGroup) {
  143.                 System.out.print(city.x);
  144.                 System.out.print("\t");
  145.                 System.out.println(city.y);
  146.             }
  147.             System.out.println();
  148.         }
  149.     }
  150.  
  151.     private void addWarehouseToGroups() {
  152.         for (ArrayList<City> cityGroup : dividedCities) {
  153.             //add warehouse at the end of each group
  154.             cityGroup.add(cityGroup.size(), warehouse);
  155.             //add warehouse at the beginning of each group
  156.             cityGroup.add(0, warehouse);
  157.         }
  158.     }
  159. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement