public void ElemKivetel(int ID) { ButorAlap elem = lista.IDthElem(ID); int minimum1; int minimum2; if (elem is NormalButor) { minimum1 = Math.Min(elem.Szelesseg, elem.Hosszusag); minimum2 = Math.Min(Math.Max(elem.Szelesseg, elem.Hosszusag), elem.Magassag); } else { minimum1 = elem.Hosszusag; minimum2 = elem.Szelesseg; } int bal = int.Parse(elem.BalFelsoKoordinata.Split()[0]); int jobb = int.Parse(elem.BalFelsoKoordinata.Split()[1]); for (int i = bal; i < bal + minimum1; i++) { for (int j = jobb; j < jobb + minimum2; j++) { raktarButorokkal[i, j] = 0; } } elem.BalFelsoKoordinata = ""; }
public void ElejereBeszuras(ButorAlap elem) { ListaElem uj = new ListaElem(); uj.tartalom = elem; uj.kovetkezo = fej; fej = uj; }
public bool getHely(ButorAlap elem, bool elhelyez) { if (elem is NormalButor) { int minimum1 = Math.Min(elem.Szelesseg, elem.Hosszusag); int minumum2 = Math.Min(Math.Max(elem.Szelesseg, elem.Hosszusag), elem.Magassag); return(raktarVegignez(elem, minimum1, minumum2, elhelyez)); } else { return(raktarVegignez(elem, elem.Hosszusag, elem.Szelesseg, elhelyez)); } }
private void Utbanvan(ref int[] lista, ButorAlap elem, Raktar raktar) { if (elem == null || elem.BalFelsoKoordinata == null) { throw new NincsARaktarbanException() { HibaUzenet = "[ERR]Nincs benne a raktárban" } } ; int minimum1; int minimum2; if (elem is NormalButor) { minimum1 = Math.Min(elem.Szelesseg, elem.Hosszusag); minimum2 = Math.Min(Math.Max(elem.Szelesseg, elem.Hosszusag), elem.Magassag); } else { minimum1 = elem.Hosszusag; minimum2 = elem.Szelesseg; } int balalsoKoordinata = int.Parse(elem.BalFelsoKoordinata.Split()[0]) + minimum1 + 1; int bal = int.Parse(elem.BalFelsoKoordinata.Split()[1]); int jobb = bal + minimum2; int db = 0; for (int i = bal; i < jobb; i++) { for (int j = balalsoKoordinata; j < raktar.raktarButorokkal.GetLength(1); j++) { if (!lista.Contains(raktar.raktarButorokkal[j, i]) && raktar.raktarButorokkal[j, i] != elem.ID) { lista[db++] = raktar.raktarButorokkal[j, i]; } } } if (elem is AlacsonyButor) { if ((elem as AlacsonyButor).rajtaLevoButorIDk != "") { int rajtadb = (elem as AlacsonyButor).rajtaLevoButorIDk.Count(Char.IsWhiteSpace) + 1; for (int i = 0; i < rajtadb; i++) { lista[db++] = int.Parse((elem as AlacsonyButor).rajtaLevoButorIDk.Split()[i]); } } } }
public void ButorKihozatal(int ID, Raktar raktar) { ButorAlap elem = raktar.lista.IDthElem(ID); int[] UtbanVanIDk = new int[raktar.ButorDarab - 1]; Utbanvan(ref UtbanVanIDk, elem, raktar); LancoltLista kihozottButorokLista = new LancoltLista(); int j = 0; while (j < raktar.ButorDarab && UtbanVanIDk[j] != 0) { kihozottButorokLista.VegereBeszuras(raktar.lista.IDthElem(UtbanVanIDk[j])); raktar.ElemKivetel(UtbanVanIDk[j++]); } raktar.ElemKivetel(ID); raktar.lista.KitorolListabol(ID, raktar.lista); raktar.ButorDarab--; int kihozottDb = kihozottButorokLista.DarabElem(kihozottButorokLista); if (kihozottDb != 0) { bool[] OPT = new bool[kihozottDb]; bool[] E = new bool[kihozottDb]; bool[,] R = new bool[kihozottDb, 2]; for (int i = 0; i < kihozottDb; i++) { R[i, 0] = true; R[i, 1] = false; } bool van = false; OptimBTS.OPTIMBTS(0, ref E, R, ref van, this, ref OPT, kihozottButorokLista); for (int i = 0; i < kihozottDb; i++) { if (OPT[i]) { getHely(kihozottButorokLista.NthElem(i), true); // visszarakas a raktarba OnUjHely(kihozottButorokLista.NthElem(i).ID, kihozottButorokLista.NthElem(i).BalFelsoKoordinata); } else { throw new NincsTobbHelyButornakTeljesRendezesElottException() { HibaUzenet = "[ERR]Egy butornak nem sikerült helyet találni", elem = kihozottButorokLista.NthElem(i) }; } } } }
public void VegereBeszuras(ButorAlap elem) { ListaElem uj = new ListaElem(); uj.tartalom = elem; uj.kovetkezo = null; if (fej == null) { fej = uj; return; } else { ListaElem p = fej; while (p.kovetkezo != null) { p = p.kovetkezo; } p.kovetkezo = uj; return; } }
private bool raktarVegignez(ButorAlap elem, int meddig1, int meddig2, bool elhelyez) { for (int i = 0; i < raktarButorokkal.GetLength(0) - meddig1; i++) { for (int j = 0; j < raktarButorokkal.GetLength(1) - meddig2; j++) { if (raktarButorokkal[i, j] == 0) { bool joHely = HelyEllenorzes(i, j, meddig1, meddig2, 0); if (joHely == true) { if (elhelyez) { Elemelhelyez(meddig1, meddig2, i, j, elem.ID); elem.BalFelsoKoordinata = i.ToString() + " " + j.ToString(); } return(true); } } if (lista.IDthElem(raktarButorokkal[i, j]) is AlacsonyButor) { ButorAlap elemseged = lista.IDthElem(raktarButorokkal[i, j]); if (elemseged.Magassag + elem.Magassag < Magassag && (elemseged as AlacsonyButor).rahelyezhetoMegButor) { bool joHely = false; if (elem is NormalButor) { int minimum1 = Math.Min(elem.Szelesseg, elem.Hosszusag); int minumum2 = Math.Min(Math.Max(elem.Szelesseg, elem.Hosszusag), elem.Magassag); joHely = HelyEllenorzes(i, j, meddig1, meddig2, elemseged.ID); } else { joHely = HelyEllenorzes(i, j, meddig1, meddig2, elemseged.ID); } if (joHely == true) { if (elhelyez) { elem.BalFelsoKoordinata = i.ToString() + " " + j.ToString(); if (elem is NormalButor) { (elemseged as AlacsonyButor).osszMagassag += Math.Max(elem.Magassag, Math.Max(elem.Szelesseg, elem.Hosszusag)); (elemseged as AlacsonyButor).rahelyezhetoMegButor = false; (elemseged as AlacsonyButor).rajtaLevoButorIDk += elem.ID.ToString(); } if (elem is AlloButor) { (elemseged as AlacsonyButor).osszMagassag += elem.Magassag; (elemseged as AlacsonyButor).rahelyezhetoMegButor = false; (elemseged as AlacsonyButor).rajtaLevoButorIDk += elem.ID.ToString(); } if (elem is AlacsonyButor) { (elemseged as AlacsonyButor).osszMagassag += elem.Magassag; (elemseged as AlacsonyButor).rajtaLevoButorIDk += elem.ID.ToString() + " "; } } return(true); } } } } } return(false); }