static bool Fk(int szint, bool r, Raktar raktar, bool[] E) { if (r == false) { return(true); } bool seged; seged = raktar.getHely(raktar.lista.IDthElem(szint + 1), true); return(seged); }
static bool Fk(int szint, bool r, Raktar raktar, bool[] E, LancoltLista lista) { if (r == false) { return(true); } bool seged; seged = raktar.getHely(lista.NthElem(szint), false); return(seged); }
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 static void BTS(int szint, ref bool[] E, bool[,] R, ref bool van, Raktar raktar) { int i = -1; while (!van && i < 2) { i++; if (Ft(szint, R[szint, i], raktar, E)) { if (Fk(szint, R[szint, i], raktar, E)) { E[szint] = R[szint, i]; if (szint == raktar.ButorDarab - 1) { van = true; } else { BTS(szint + 1, ref E, R, ref van, raktar); } } } } }
static void Main(string[] args) { Raktar raktar = new Raktar(50, 50, 45); raktar.lista.NemFerBeAlap += OnNemFerBeAlap; raktar.UjHely += OnUjHely; Console.WriteLine("Az adatok beolvasasa közbeni problémák:"); raktar.AdatHelyessegEllenorzes(); Console.WriteLine("\n-------------------\nSikeresen beolvasott butorok"); raktar.lista.Bejaras(); raktar.OsszesButorElhelyezeseARaktarban(false); Console.WriteLine("Enter a folytatashoz"); Console.ReadLine(); bool vege = false; while (vege != true) { Console.Clear(); Console.WriteLine("Opciók\n\n1. bútorok kilistázása\n2. bútor kihozás\n3. kilépés"); Console.Write("Választott opció: "); string opcio = Console.ReadLine(); switch (opcio) { case "1": Console.Clear(); raktar.lista.Bejaras(); Console.WriteLine("Enter a folytatashoz"); Console.ReadLine(); break; case "2": Console.Clear(); raktar.RaktarGrafKiir(); Console.Write("Kihozni kivant butor ID-je: "); int kihozButorId = int.Parse(Console.ReadLine()); if (kihozButorId <= 0 || kihozButorId > raktar.lista.DarabElem(raktar.lista)) { Console.WriteLine("Az ID-nek nagyobbnak kell lennie mint 0 és kisebb mint " + (raktar.lista.DarabElem(raktar.lista) + 1)); } else { try { raktar.ButorKihozatal(kihozButorId, raktar); } catch (NincsARaktarbanException e) { Console.WriteLine(e.HibaUzenet); } catch (NincsTobbHelyButornakTeljesRendezesElottException) { raktar.raktarButorokkal = new int[raktar.Szelesseg, raktar.Hosszusag]; raktar.OsszesButorElhelyezeseARaktarban(true); } catch (NincsTobbHelyButornakTeljesRendezesUtanException e) { Console.WriteLine(e.HibaUzenet); for (int i = 0; i < e.elemek.DarabElem(e.elemek); i++) { Console.WriteLine(e.elemek.NthElem(i)); } } } Console.WriteLine("Enter a folytatashoz"); Console.ReadLine(); break; case "3": vege = true; break; default: break; } } }
static bool Ft(int szint, bool r, Raktar raktar, bool[] E) { return(true); }
public static void OPTIMBTS(int szint, ref bool[] E, bool[,] R, ref bool van, Raktar raktar, ref bool[] OPT, LancoltLista lista) { int i = -1; while (i < 1) { if (szint == lista.DarabElem(lista) - 1) { ; } i++; if (Ft(szint, R[szint, i], raktar, E)) { if (Fk(szint, R[szint, i], raktar, E, lista)) { E[szint] = R[szint, i]; if (szint == lista.DarabElem(lista) - 1) { if (!van || (Josag(E) > Josag(OPT))) { for (int j = 0; j < E.Length; j++) { OPT[j] = E[j]; } } van = true; } else { OPTIMBTS(szint + 1, ref E, R, ref van, raktar, ref OPT, lista); } } } } }