-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathVehicle.java
More file actions
85 lines (72 loc) · 1.74 KB
/
Vehicle.java
File metadata and controls
85 lines (72 loc) · 1.74 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
import java.util.ArrayList;
public class Vehicle {
int currRow, currCol;
Ride ride;
boolean hasPassenger;
public Vehicle() {
currRow = 0;
currCol = 0;
ride = null;
hasPassenger = false;
}
public void update(int t, ArrayList<Ride> rides) {
if (ride == null) {
pickNewRide(rides);
} else if (hasPassenger) {
int destRow = ride.getEndRow();
if (currRow > destRow) {
currRow--;
} else if (currRow < destRow) {
currRow++;
} else {
int destCol = ride.getEndCol();
if (currCol > destCol) {
currCol--;
} else {
currCol++;
}
if (currCol == destCol) {
hasPassenger = false;
// Scrivi su file
pickNewRide(rides);
}
}
} else {
int destRow = ride.getStartRow();
if (currRow > destRow) {
currRow--;
} else if (currRow < destRow) {
currRow++;
} else {
int destCol = ride.getStartCol();
if (currCol > destCol) {
currCol--;
} else {
currCol++;
}
if (currCol == destCol && ride.getEarly() <= t) {
// Scrivi su file
hasPassenger = true;
}
}
}
}
public void pickNewRide(ArrayList<Ride> r) {
if(r.size() <= 0) {
return;
}
int bestTimeArrival = Integer.MAX_VALUE;
int bestIndex = 0;
for(int i = 0; i < r.size(); i++) {
Ride curr = r.get(i);
if(curr.getEarly() + Math.abs(curr.getStartRow() - currRow) + Math.abs(curr.getStartCol() - currCol) < bestTimeArrival) {
bestTimeArrival = curr.getEarly() + Math.abs(curr.getStartRow() - currRow) + Math.abs(curr.getStartCol() - currCol);
bestIndex = i;
}
}
ride = r.remove(bestIndex);
}
public String toString() {
return currRow + " " + currCol;
}
}