From 81879476abdd8970426e2cef5e7ed9ea20766f4c Mon Sep 17 00:00:00 2001 From: Tomasz Piechucki Date: Tue, 3 May 2011 15:52:35 +0000 Subject: [PATCH] =?UTF-8?q?Algorytm=20najblizsze=20wezwanie=20-=20dodana?= =?UTF-8?q?=20obsluga=20dw=C3=B3ch=20wind=20Nietestowane!?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../logic/AlgorytmNajblizszeWezwanie.java | 177 +++++++++++++++++- 1 file changed, 175 insertions(+), 2 deletions(-) diff --git a/Winda/src/winda/logic/AlgorytmNajblizszeWezwanie.java b/Winda/src/winda/logic/AlgorytmNajblizszeWezwanie.java index 7c0238e..372e8d9 100644 --- a/Winda/src/winda/logic/AlgorytmNajblizszeWezwanie.java +++ b/Winda/src/winda/logic/AlgorytmNajblizszeWezwanie.java @@ -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> tr = nw.TrasaDwieWindy(pasazerowie); } public List> TrasaDwieWindy(List pasazerowie) { - throw new UnsupportedOperationException("Not supported yet."); + this.pasazerowie = pasazerowie; + List> tr = new ArrayList>(); + List trasa1 = new ArrayList(); //trasa windy pierwszej + List trasa2 = new ArrayList(); //trasa windy drugiej + List pozostaliPasazerowie1 = new ArrayList(); + List pozostaliPasazerowie2 = new ArrayList(); + 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 tmpPasazerowie1 = new ArrayList(); + + List weszli1 = new ArrayList(); + 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(); + List doUsuniecia1 = new ArrayList(); + 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 tmpPasazerowie2 = new ArrayList(); + + 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 weszli2 = new ArrayList(); + 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(); + List doUsuniecia2 = new ArrayList(); + 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 toRemove1 = new ArrayList(); + 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 toRemove2 = new ArrayList(); + 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; } } \ No newline at end of file