Algorytm najblizsze wezwanie - dodana obsluga dwóch wind
Nietestowane!
This commit is contained in:
parent
9ce9e92e2d
commit
81879476ab
1 changed files with 175 additions and 2 deletions
|
@ -89,7 +89,7 @@ public class AlgorytmNajblizszeWezwanie implements IAlgorytm{
|
||||||
this.kierunekJazdy = true;
|
this.kierunekJazdy = true;
|
||||||
}
|
}
|
||||||
for(int i = 1; i < trasa.size()-1; i++){
|
for(int i = 1; i < trasa.size()-1; i++){
|
||||||
if(trasa.get(i).pasazerowieWsiadający.size() == 0 && trasa.get(i).pasazerowieWysiadajacy.size() == 0){
|
if(trasa.get(i).pasazerowieWsiadający.isEmpty() && trasa.get(i).pasazerowieWysiadajacy.isEmpty()){
|
||||||
trasa.remove(i);
|
trasa.remove(i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -130,9 +130,182 @@ public class AlgorytmNajblizszeWezwanie implements IAlgorytm{
|
||||||
}
|
}
|
||||||
System.out.println();
|
System.out.println();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
List<List<Pietro>> tr = nw.TrasaDwieWindy(pasazerowie);
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<List<Pietro>> TrasaDwieWindy(List<Pasazer> pasazerowie) {
|
public List<List<Pietro>> TrasaDwieWindy(List<Pasazer> pasazerowie) {
|
||||||
throw new UnsupportedOperationException("Not supported yet.");
|
this.pasazerowie = pasazerowie;
|
||||||
|
List<List<Pietro>> tr = new ArrayList<List<Pietro>>();
|
||||||
|
List<Pietro> trasa1 = new ArrayList<Pietro>(); //trasa windy pierwszej
|
||||||
|
List<Pietro> trasa2 = new ArrayList<Pietro>(); //trasa windy drugiej
|
||||||
|
List<Pasazer> pozostaliPasazerowie1 = new ArrayList<Pasazer>();
|
||||||
|
List<Pasazer> pozostaliPasazerowie2 = new ArrayList<Pasazer>();
|
||||||
|
int aktualnePietro1 = 0;
|
||||||
|
int aktualnePietro2 = 0;
|
||||||
|
boolean kierunekJazdy1 = true;
|
||||||
|
boolean kierunekJazdy2 = true;
|
||||||
|
|
||||||
|
|
||||||
|
for (Pasazer p : pasazerowie)
|
||||||
|
this.pozostaliPasazerowie.add(new Pasazer(p.GetName(), p.GetStart(), p.GetStop()));
|
||||||
|
for (Pasazer p : pasazerowie)
|
||||||
|
pozostaliPasazerowie1.add(new Pasazer(p.GetName(), p.GetStart(), p.GetStop()));
|
||||||
|
for (Pasazer p : pasazerowie)
|
||||||
|
pozostaliPasazerowie2.add(new Pasazer(p.GetName(), p.GetStart(), p.GetStop()));
|
||||||
|
|
||||||
|
while (this.pozostaliPasazerowie.size() > 0) {
|
||||||
|
Pietro pietro1 = new Pietro();
|
||||||
|
pietro1.numerPietra = aktualnePietro1;
|
||||||
|
List<Pasazer> tmpPasazerowie1 = new ArrayList<Pasazer>();
|
||||||
|
|
||||||
|
List<Pasazer> weszli1 = new ArrayList<Pasazer>();
|
||||||
|
for(Pasazer p : this.pasazerowie)
|
||||||
|
for (Pasazer pp1 : pozostaliPasazerowie1)
|
||||||
|
for(Pasazer pp : this.pozostaliPasazerowie)
|
||||||
|
{
|
||||||
|
boolean isIn = false;
|
||||||
|
for(Pietro pi : trasa1)
|
||||||
|
for(Pasazer pw : pi.pasazerowieWsiadający)
|
||||||
|
if(pw.GetName() == p.GetName())
|
||||||
|
isIn = true;
|
||||||
|
if(!isIn && p.GetName() == pp.GetName() && p.GetName() == pp1.GetName() && p.GetStart() == aktualnePietro1)
|
||||||
|
tmpPasazerowie1.add(p);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (Pasazer pp : pozostaliPasazerowie2)
|
||||||
|
for (Pasazer p : tmpPasazerowie1)
|
||||||
|
if(p.GetName() == pp.GetName())
|
||||||
|
weszli1.add(pp);
|
||||||
|
pietro1.pasazerowieWsiadający = tmpPasazerowie1;
|
||||||
|
pozostaliPasazerowie2.removeAll(weszli1);
|
||||||
|
|
||||||
|
tmpPasazerowie1 = new ArrayList<Pasazer>();
|
||||||
|
List<Pasazer> doUsuniecia1 = new ArrayList<Pasazer>();
|
||||||
|
for(Pietro p : trasa1)
|
||||||
|
for(Pasazer pasazer : p.pasazerowieWsiadający)
|
||||||
|
for(Pasazer pp : this.pozostaliPasazerowie)
|
||||||
|
if(pasazer.GetName() == pp.GetName() && pasazer.GetStop() == aktualnePietro1) {
|
||||||
|
tmpPasazerowie1.add(pasazer);
|
||||||
|
doUsuniecia1.add(pp);
|
||||||
|
}
|
||||||
|
|
||||||
|
pietro1.pasazerowieWysiadajacy = tmpPasazerowie1;
|
||||||
|
this.pozostaliPasazerowie.removeAll(doUsuniecia1);
|
||||||
|
trasa1.add(pietro1);
|
||||||
|
int nastepnePietro1;
|
||||||
|
boolean pustaWinda1 = true;
|
||||||
|
if(kierunekJazdy1)
|
||||||
|
nastepnePietro1 = this.maxPietro;
|
||||||
|
else
|
||||||
|
nastepnePietro1 = 0;
|
||||||
|
for(Pietro p : trasa1)
|
||||||
|
for(Pasazer pasazer : p.pasazerowieWsiadający)
|
||||||
|
for(Pasazer pp : this.pozostaliPasazerowie)
|
||||||
|
if(pasazer.GetName() == pp.GetName()){
|
||||||
|
pustaWinda1 = false;
|
||||||
|
if(kierunekJazdy1 && pasazer.GetStop() > aktualnePietro1 && pasazer.GetStop() < nastepnePietro1)
|
||||||
|
nastepnePietro1 = pasazer.GetStop();
|
||||||
|
else if(!kierunekJazdy1 && pasazer.GetStop() < aktualnePietro1 && pasazer.GetStop() > nastepnePietro1)
|
||||||
|
nastepnePietro1 = pasazer.GetStop();
|
||||||
|
}
|
||||||
|
|
||||||
|
if(pustaWinda1){
|
||||||
|
for(Pasazer pp : this.pozostaliPasazerowie)
|
||||||
|
if(kierunekJazdy1 && pp.GetStart() > aktualnePietro1 && pp.GetStart() < nastepnePietro1)
|
||||||
|
nastepnePietro1 = pp.GetStart();
|
||||||
|
else if(!kierunekJazdy1 && pp.GetStart() < aktualnePietro1 && pp.GetStart() > nastepnePietro1)
|
||||||
|
nastepnePietro1 = pp.GetStart();
|
||||||
|
}
|
||||||
|
aktualnePietro1 = nastepnePietro1;
|
||||||
|
if(aktualnePietro1 == this.maxPietro)
|
||||||
|
kierunekJazdy1 = false;
|
||||||
|
else if(aktualnePietro1 == 0)
|
||||||
|
kierunekJazdy1 = true;
|
||||||
|
|
||||||
|
Pietro pietro2 = new Pietro();
|
||||||
|
pietro2.numerPietra = aktualnePietro2;
|
||||||
|
List<Pasazer> tmpPasazerowie2 = new ArrayList<Pasazer>();
|
||||||
|
|
||||||
|
for(Pasazer p : this.pasazerowie)
|
||||||
|
for(Pasazer pp2 : pozostaliPasazerowie2)
|
||||||
|
for(Pasazer pp : this.pozostaliPasazerowie)
|
||||||
|
{
|
||||||
|
boolean isIn = false;
|
||||||
|
for(Pietro pi : trasa2)
|
||||||
|
for(Pasazer pw : pi.pasazerowieWsiadający)
|
||||||
|
if(pw.GetName() == p.GetName())
|
||||||
|
isIn = true;
|
||||||
|
if(!isIn && p.GetName() == pp.GetName() && p.GetName() == pp2.GetName() && p.GetStart() == aktualnePietro2)
|
||||||
|
tmpPasazerowie2.add(p);
|
||||||
|
}
|
||||||
|
|
||||||
|
List<Pasazer> weszli2 = new ArrayList<Pasazer>();
|
||||||
|
for (Pasazer pp : pozostaliPasazerowie2)
|
||||||
|
for (Pasazer p : tmpPasazerowie1)
|
||||||
|
if(p.GetName() == pp.GetName())
|
||||||
|
weszli2.add(pp);
|
||||||
|
pietro2.pasazerowieWsiadający = tmpPasazerowie2;
|
||||||
|
pozostaliPasazerowie1.removeAll(weszli2);
|
||||||
|
|
||||||
|
tmpPasazerowie2 = new ArrayList<Pasazer>();
|
||||||
|
List<Pasazer> doUsuniecia2 = new ArrayList<Pasazer>();
|
||||||
|
for(Pietro p : trasa2)
|
||||||
|
for(Pasazer pasazer : p.pasazerowieWsiadający)
|
||||||
|
for(Pasazer pp : this.pozostaliPasazerowie)
|
||||||
|
if(pasazer.GetName() == pp.GetName() && pasazer.GetStop() == aktualnePietro2) {
|
||||||
|
tmpPasazerowie2.add(pasazer);
|
||||||
|
doUsuniecia2.add(pp);
|
||||||
|
}
|
||||||
|
|
||||||
|
pietro2.pasazerowieWysiadajacy = tmpPasazerowie2;
|
||||||
|
this.pozostaliPasazerowie.removeAll(doUsuniecia2);
|
||||||
|
trasa2.add(pietro2);
|
||||||
|
int nastepnePietro2;
|
||||||
|
boolean pustaWinda2 = true;
|
||||||
|
if(kierunekJazdy2)
|
||||||
|
nastepnePietro2 = this.maxPietro;
|
||||||
|
else
|
||||||
|
nastepnePietro2 = 0;
|
||||||
|
for(Pietro p : trasa2)
|
||||||
|
for(Pasazer pasazer : p.pasazerowieWsiadający)
|
||||||
|
for(Pasazer pp : this.pozostaliPasazerowie)
|
||||||
|
if(pasazer.GetName() == pp.GetName()){
|
||||||
|
pustaWinda2 = false;
|
||||||
|
if(kierunekJazdy2 && pasazer.GetStop() > aktualnePietro2 && pasazer.GetStop() < nastepnePietro2)
|
||||||
|
nastepnePietro2 = pasazer.GetStop();
|
||||||
|
else if(!kierunekJazdy2 && pasazer.GetStop() < aktualnePietro2 && pasazer.GetStop() > nastepnePietro2)
|
||||||
|
nastepnePietro2 = pasazer.GetStop();
|
||||||
|
}
|
||||||
|
|
||||||
|
if(pustaWinda2){
|
||||||
|
for(Pasazer pp : this.pozostaliPasazerowie)
|
||||||
|
if(kierunekJazdy2 && pp.GetStart() > aktualnePietro2 && pp.GetStart() < nastepnePietro2)
|
||||||
|
nastepnePietro2 = pp.GetStart();
|
||||||
|
else if(!kierunekJazdy2 && pp.GetStart() < aktualnePietro2 && pp.GetStart() > nastepnePietro2)
|
||||||
|
nastepnePietro2 = pp.GetStart();
|
||||||
|
}
|
||||||
|
aktualnePietro2 = nastepnePietro2;
|
||||||
|
if(aktualnePietro2 == this.maxPietro)
|
||||||
|
kierunekJazdy2 = false;
|
||||||
|
else if(aktualnePietro2 == 0)
|
||||||
|
kierunekJazdy2 = true;
|
||||||
|
}
|
||||||
|
List<Pietro> toRemove1 = new ArrayList<Pietro>();
|
||||||
|
for(int i = 1; i < trasa1.size()-1; i++)
|
||||||
|
if(trasa1.get(i).pasazerowieWsiadający.isEmpty() && trasa1.get(i).pasazerowieWysiadajacy.isEmpty())
|
||||||
|
toRemove1.add(trasa1.get(i));
|
||||||
|
List<Pietro> toRemove2 = new ArrayList<Pietro>();
|
||||||
|
for(int i = 1; i < trasa2.size()-1; i++)
|
||||||
|
if(trasa2.get(i).pasazerowieWsiadający.isEmpty() && trasa2.get(i).pasazerowieWysiadajacy.isEmpty())
|
||||||
|
toRemove2.add(trasa2.get(i));
|
||||||
|
|
||||||
|
trasa1.removeAll(toRemove1);
|
||||||
|
trasa2.removeAll(toRemove2);
|
||||||
|
|
||||||
|
tr.add(trasa1);
|
||||||
|
tr.add(trasa2);
|
||||||
|
|
||||||
|
return tr;
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in a new issue