Skip to content
Snippets Groups Projects
Commit 0d94a185 authored by Pedro Pablo Cardona Arroyave's avatar Pedro Pablo Cardona Arroyave
Browse files

Get list of closes places was added

parent 94948b08
No related branches found
No related tags found
No related merge requests found
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
...@@ -18,7 +18,11 @@ public class Task9 { ...@@ -18,7 +18,11 @@ public class Task9 {
System.out.println(node.getLatitude() + "," + node.getLongitude()); System.out.println(node.getLatitude() + "," + node.getLongitude());
}*/ }*/
g.loadInterestPoints("interessepktIceland.txt"); g.loadInterestPoints("interessepktIceland.txt");
g.printInterestPoints(); Map<Integer,Integer> list = Dijkstra.getListOfPlaces(g,0,8,(short) 2).getPlaceList();
list.forEach((number, integer) -> {
Node node = g.getNode(number);
System.out.println(node.getName() +" : "+node.getLatitude()+","+node.getLongitude()+" Driving time: " + integer );
});
} }
} }
class Node{ class Node{
...@@ -162,9 +166,7 @@ class Graph{ ...@@ -162,9 +166,7 @@ class Graph{
List<String> data = Utils.readFile(inFile); List<String> data = Utils.readFile(inFile);
for (int i = 1; i < data.size(); ++i) { for (int i = 1; i < data.size(); ++i) {
String[] splitText = Utils.dividedText(data.get(i), 3); String[] splitText = Utils.dividedText(data.get(i), 3);
Node node = getNode(Integer.parseInt(splitText[0])); this.setTypes(Integer.parseInt(splitText[0]),Short.parseShort(splitText[1]),splitText[2]);
node.setType(Short.parseShort(splitText[1]));
node.setName(splitText[2]);
} }
System.out.println("Interest points loaded."); System.out.println("Interest points loaded.");
} }
...@@ -182,7 +184,7 @@ class Graph{ ...@@ -182,7 +184,7 @@ class Graph{
System.out.println(sb.toString()); System.out.println(sb.toString());
} }
private void setTypes(int nodeNumber,int typeValue, String name){ private void setTypes(int nodeNumber,short typeValue, String name){
Node node = this.getNode(nodeNumber); Node node = this.getNode(nodeNumber);
if((typeValue&1) ==1) node.setType((short) 1); if((typeValue&1) ==1) node.setType((short) 1);
...@@ -257,7 +259,7 @@ class Dijkstra{ ...@@ -257,7 +259,7 @@ class Dijkstra{
Node node = graph.getNode(nextNode); Node node = graph.getNode(nextNode);
if (node.getName() != null){ if (node.getName() != null){
if(node.isTypeOf(type)){ if(node.isTypeOf(type)){
listOfPlaces.addPlace(node,currentSum); listOfPlaces.addPlace(node.getNumber(),currentSum);
} }
} }
} }
...@@ -328,42 +330,46 @@ class Dijkstra{ ...@@ -328,42 +330,46 @@ class Dijkstra{
} }
class ListOfPlaces{ class ListOfPlaces{
private final Map<Node, Integer> placeList = new HashMap<>(); private final Map<Integer, Integer> placeList = new HashMap<>();
int maxDriveTime = 0; int maxDriveTime = 0;
private final int maxSize; private final int maxSize;
int numberOfFarthestNode = -1;
public ListOfPlaces(int maxSize){ public ListOfPlaces(int maxSize){
this.maxSize = maxSize; this.maxSize = maxSize;
} }
public void addPlace(Node node, int driveTime){ public void addPlace(int nodeNumber, int driveTime){
if(placeList.size()<this.maxSize){ if(placeList.size()<this.maxSize){
placeList.put(node,driveTime); placeList.put(nodeNumber,driveTime);
if(driveTime> this.maxDriveTime) this.maxDriveTime = driveTime; if(driveTime> this.maxDriveTime){
this.maxDriveTime = driveTime;
this.numberOfFarthestNode = nodeNumber;
}
} }
else{ else{
fixPlaceList(node,driveTime); fixPlaceList(nodeNumber,driveTime);
} }
} }
private void fixPlaceList(Node node, int driveTime){ private void fixPlaceList(int nodeNumber, int driveTime){
if (placeList.containsKey(node) && placeList.get(node)<driveTime){ if (placeList.containsKey(nodeNumber) && placeList.get(nodeNumber)<driveTime){
placeList.put(node,driveTime); placeList.replace(nodeNumber,driveTime);
} }
else{ else if(driveTime<maxDriveTime){
Node testNode; placeList.remove(numberOfFarthestNode);
int testDriveTime; placeList.put(nodeNumber,driveTime);
Node[] nodeList = (Node[]) placeList.keySet().toArray(); int max = 0;
for(int i = 0; i<maxSize;i++){ placeList.forEach((integer, integer2) -> {
if(placeList.get(nodeList[i])<driveTime){ if(integer2>max){
testNode = nodeList[i]; maxDriveTime=integer2;
testDriveTime = placeList.get(nodeList[i]); numberOfFarthestNode =integer;
placeList.remove(testNode);
placeList.put(node,driveTime);
fixPlaceList(testNode,testDriveTime);
} }
});
} }
} }
public Map<Integer,Integer> getPlaceList(){
return placeList;
} }
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment