Algorytm najblizsze wezwanie - dodana obsluga dwóch wind

Nietestowane!
This commit is contained in:
Tomasz Piechucki 2011-05-03 15:52:35 +00:00
parent 9ce9e92e2d
commit 81879476ab

View file

@ -89,7 +89,7 @@ public class AlgorytmNajblizszeWezwanie implements IAlgorytm{
this.kierunekJazdy = true;
}
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);
}
}
@ -130,9 +130,182 @@ public class AlgorytmNajblizszeWezwanie implements IAlgorytm{
}
System.out.println();
}
List<List<Pietro>> tr = nw.TrasaDwieWindy(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;
}
}