nie działa!!!

nie wiem czemu przy wywołaniu pętli:
for(int k = 0; k < pas_tmp.size()-1; k++){
                                pietro2.numerPietra = pas_tmp.get(k).GetStop();
                                //System.out.println("L:"+pietro2.numerPietra);
                                pietro2.pasazerowieWysiadajacy.add(pas_tmp.get(k));
                                trasa.add(licznik,pietro2); licznik++;
                                i++;
}

tak jakby nadpisuje cały czas pietro2 i cały czas to samo się dodaje to trasa
This commit is contained in:
Michał Ogrodowski 2011-04-13 19:22:45 +00:00
parent 2c7c2762c2
commit 9b3ac59286

View file

@ -13,147 +13,142 @@ import java.util.List;
* @author Tomek
*/
public class AlgorytmNajblizszeWezwanie implements IAlgorytm{
int pietroWindy = 1;
int maxPietro;
int minPietro = 1;
int pietroWindy = 0;
int maxPietro=11;
int minPietro = 0;
int stop = 0;
int start = 0;
Pasazer p = new Pasazer(0,0,0);
int NpietroWindy = 0;
Pasazer p = new Pasazer(-1,-1,-1);
public List<Pietro> Trasa(List<Pasazer> pasazerowie){
List<Pietro> trasa = new ArrayList();
int [] t = new int[2*pasazerowie.size()+1];
int[][] ttt = new int[2*pasazerowie.size()+1][3];
int tab_len = 0;
int iluPasazerow = 0;
t[tab_len] = pietroWindy;
tab_len++;
int licznik = 0;
//List<Pasazer> pas_tmp = new ArrayList();
int zmiana = 0;
int i = 0;
Pietro pietro = new Pietro();
int ile = 0;
while(i < pasazerowie.size()){
Pietro pietro = new Pietro();
int z = 0; int s;
Pasazer[] ppp = new Pasazer[2*pasazerowie.size()]; int g=0;
for(int l = 0; l < pasazerowie.size(); l++){
if(pietroWindy == pasazerowie.get(l).GetStart()){
z = 1;
ppp[g] = pasazerowie.get(l); g++;
}
else{
z = 0;
}
}
if(z == 1){
for(int q=0;q<g;q++){
t[tab_len] = ppp[q].GetStart();
tab_len++;
pietro.numerPietra = ppp[q].GetStart();
pietro.pasazerowieWsiadający.add(pasazerowie.get(q));
}
for(int w=0;w<g;w++){
t[tab_len] = ppp[w].GetStop();
tab_len++;
pietroWindy = ppp[w].GetStop();
ppp[w].SetStart(-1);
ppp[w].SetStop(-1);
i+=1;
}
for(int y = 0; y < trasa.size(); y++){
for(s = 0; s < trasa.get(y).pasazerowieWysiadajacy.size(); s++){
if(pietroWindy == trasa.get(y).pasazerowieWysiadajacy.get(s).GetStop()){
pietro.pasazerowieWysiadajacy.add(trasa.get(y).pasazerowieWysiadajacy.get(s));
Pietro pietro2 = new Pietro();
Pietro []pietro3 = new Pietro[12];
List<Pietro> pietro_tmp= new ArrayList();
List<Pasazer> pas_tmp = new ArrayList();
boolean dodano = false;
boolean is = false;
ile=0;
for(int j = 0; j < pasazerowie.size(); j++){
if(pietroWindy == pasazerowie.get(j).GetStart()){
if(j==0){
pietro.numerPietra = pietroWindy;
}
//is = true;
pietro.pasazerowieWsiadający.add(pasazerowie.get(j));
//pietro.pasazerowieWysiadajacy.add(p);
for(int k = 0; k < trasa.size(); k++){
for(int l = 0; l < trasa.get(k).pasazerowieWysiadajacy.size();l++){
if(pietro.numerPietra == trasa.get(k).pasazerowieWysiadajacy.get(l).GetStop()){
pietro.pasazerowieWysiadajacy.add(trasa.get(k).pasazerowieWysiadajacy.get(l));
trasa.get(k).pasazerowieWysiadajacy.get(l).SetStop(-1);
}
}
}
pas_tmp.add(pasazerowie.get(j));
}
}
}
pietroWindy = pas_tmp.get(pas_tmp.size()-1).GetStop();
trasa.add(licznik,pietro); licznik++;
i++;
for(int k = 0; k < pas_tmp.size()-1; k++){
pietro2.numerPietra = pas_tmp.get(k).GetStop();
//System.out.println("L:"+pietro2.numerPietra);
pietro2.pasazerowieWysiadajacy.add(pas_tmp.get(k));
trasa.add(licznik,pietro2); licznik++;
i++;
}
zmiana = 0;
for(int k = 0; k < maxPietro; k++){
if(pietroWindy + k <= maxPietro){
Pasazer[] pp = new Pasazer[2*pasazerowie.size()];
int e=0;
for(int j = 0; j < pasazerowie.size(); j++){
if(pietroWindy + k == pasazerowie.get(j).GetStart()){
pp[e] = pasazerowie.get(j); e++;
}
}
for(int q=0;q<e;q++){
t[tab_len] = pp[q].GetStart();
tab_len++;
pietro.numerPietra = ppp[q].GetStart();
pietro.pasazerowieWsiadający.add(pasazerowie.get(q));
}
for(int w=0;w<e;w++){
t[tab_len] = pp[w].GetStop();
tab_len++;
pietroWindy = pp[w].GetStop();
pp[w].SetStart(-1);
pp[w].SetStop(-1);
i+=1;
zmiana = 1;
}
for(int y = 0; y < trasa.size(); y++){
for(s = 0; s < trasa.get(y).pasazerowieWysiadajacy.size(); s++){
if(pietroWindy == trasa.get(y).pasazerowieWysiadajacy.get(s).GetStop()){
pietro.pasazerowieWysiadajacy.add(trasa.get(y).pasazerowieWysiadajacy.get(s));
for(int m = 0; m < maxPietro; m++){
if(pietroWindy + m <= maxPietro){
for(int n = 0; n < pasazerowie.size(); n++){
if(pietroWindy + m == pasazerowie.get(n).GetStart()){
if(n==0){
pietro.numerPietra = pietroWindy+m;
}
}
}
}
if(zmiana == 1)
break;
if(pietroWindy - k >= minPietro){
Pasazer[] pp = new Pasazer[2*pasazerowie.size()];
int e=0;
for(int j = 0; j < pasazerowie.size(); j++){
if(pietroWindy - k == pasazerowie.get(j).GetStart()){
pp[e] = pasazerowie.get(j); e++;
}
}
for(int q=0;q<e;q++){
t[tab_len] = pp[q].GetStart();
tab_len++;
pietro.numerPietra = ppp[q].GetStart();
pietro.pasazerowieWsiadający.add(pasazerowie.get(q));
}
for(int w=0;w<e;w++){
t[tab_len] = pp[w].GetStop();
tab_len++;
pietroWindy = pp[w].GetStop();
pp[w].SetStart(-1);
pp[w].SetStop(-1);
i+=1;
zmiana = 1;
}
for(int y = 0; y < trasa.size(); y++){
for(s = 0; s < trasa.get(y).pasazerowieWysiadajacy.size(); s++){
if(pietroWindy == trasa.get(y).pasazerowieWysiadajacy.get(s).GetStop()){
pietro.pasazerowieWysiadajacy.add(trasa.get(y).pasazerowieWysiadajacy.get(s));
//is = true;
pietro.pasazerowieWsiadający.add(pasazerowie.get(n));
//pietro.pasazerowieWysiadajacy.add(p);
for(int k = 0; k < trasa.size(); k++){
for(int l = 0; l < trasa.get(k).pasazerowieWysiadajacy.size();l++){
if(pietro.numerPietra == trasa.get(k).pasazerowieWysiadajacy.get(l).GetStop()){
pietro.pasazerowieWysiadajacy.add(trasa.get(k).pasazerowieWysiadajacy.get(l));
trasa.get(k).pasazerowieWysiadajacy.get(l).SetStop(-1);
}
}
}
}
}
pas_tmp.add(pasazerowie.get(n));
}
}
pietroWindy = pas_tmp.get(pas_tmp.size()-1).GetStop();
trasa.add(licznik,pietro); licznik++;
i++;
for(int k = 0; k < pas_tmp.size()-1; k++){
pietro2.numerPietra = pas_tmp.get(k).GetStop();
//System.out.println("L:"+pietro2.numerPietra);
pietro2.pasazerowieWysiadajacy.add(pas_tmp.get(k));
trasa.add(licznik,pietro2); licznik++;
i++;
}
}
if(dodano) break;
if(zmiana == 1)
break;
if(pietroWindy - m >= minPietro){
for(int n = 0; n < pasazerowie.size(); n++){
if(pietroWindy - m == pasazerowie.get(n).GetStart()){
if(n==0){
pietro.numerPietra = pietroWindy-m;
}
//is = true;
pietro.pasazerowieWsiadający.add(pasazerowie.get(n));
//pietro.pasazerowieWysiadajacy.add(p);
for(int k = 0; k < trasa.size(); k++){
for(int l = 0; l < trasa.get(k).pasazerowieWysiadajacy.size();l++){
if(pietro.numerPietra == trasa.get(k).pasazerowieWysiadajacy.get(l).GetStop()){
pietro.pasazerowieWysiadajacy.add(trasa.get(k).pasazerowieWysiadajacy.get(l));
trasa.get(k).pasazerowieWysiadajacy.get(l).SetStop(-1);
}
}
}
pas_tmp.add(pasazerowie.get(n));
}
}
pietroWindy = pas_tmp.get(pas_tmp.size()-1).GetStop();
trasa.add(licznik,pietro); licznik++;
i++;
for(int k = 0; k < pas_tmp.size()-1; k++){
pietro2.numerPietra = pas_tmp.get(k).GetStop();
//System.out.println("L:"+pietro2.numerPietra);
pietro2.pasazerowieWysiadajacy.add(pas_tmp.get(k));
trasa.add(licznik,pietro2); licznik++;
i++;
}
}
if(dodano) break;
}
trasa.add(pietro);
}
@ -163,4 +158,44 @@ public class AlgorytmNajblizszeWezwanie implements IAlgorytm{
public void SetMaxPietro(int maxPietro) {
this.maxPietro = maxPietro;
}
}
public static void main(String[] args) {
Pasazer p1 = new Pasazer(1,2,6);
Pasazer p2 = new Pasazer(2,9,1);
Pasazer p3 = new Pasazer(3,0,6);
Pasazer p4 = new Pasazer(4,6,1);
Pasazer p5 = new Pasazer(5,0,4);
Pasazer p6 = new Pasazer(6,0,5);
Pasazer p7 = new Pasazer(7,9,7);
List<Pasazer> lp = new ArrayList();
lp.add(p1);
lp.add(p2);
lp.add(p3);
lp.add(p4);
lp.add(p5);
lp.add(p6);
lp.add(p7);
List<Pietro> tr = new ArrayList();
AlgorytmNajblizszeWezwanie l = new AlgorytmNajblizszeWezwanie();
tr = l.Trasa(lp);
for(int h = 0; h < tr.size(); h++){
System.out.println("Pietro: "+tr.get(h).numerPietra);
System.out.print("Ws: ");
for(int i =0; i <tr.get(h).pasazerowieWsiadający.size();i++){
System.out.print(""+tr.get(h).pasazerowieWsiadający.get(i).GetName()+", ");
}
System.out.print("\nWy: ");
for(int i =0; i <tr.get(h).pasazerowieWysiadajacy.size();i++){
System.out.print(""+tr.get(h).pasazerowieWysiadajacy.get(i).GetName()+", ");
}
System.out.println();
}
}
}