From fbd461e7b566b0dc07e0e27355dd7744bbc7ca24 Mon Sep 17 00:00:00 2001 From: Lendaia Mirai Date: Tue, 13 Jan 2026 03:27:55 +0100 Subject: [PATCH] thatsit --- ALGA/Optimalizalas/09_VisszalepesesKereses.cs | 342 +++++++++--------- Tesztek/09_VisszalepesesKeresesTesztek.cs | 202 +++++------ 2 files changed, 272 insertions(+), 272 deletions(-) diff --git a/ALGA/Optimalizalas/09_VisszalepesesKereses.cs b/ALGA/Optimalizalas/09_VisszalepesesKereses.cs index 8b985bd..2de0940 100644 --- a/ALGA/Optimalizalas/09_VisszalepesesKereses.cs +++ b/ALGA/Optimalizalas/09_VisszalepesesKereses.cs @@ -1,186 +1,186 @@ -// using System; +using System; -// namespace OE.ALGA.Optimalizalas -// { -// public class VisszalepesesOptimalizacio -// { -// public int n; -// public int[] M; -// public T[,] R; -// public Func ft; -// public Func fk; -// public Func josag; +namespace OE.ALGA.Optimalizalas +{ + public class VisszalepesesOptimalizacio + { + public int n; + public int[] M; + public T[,] R; + public Func ft; + public Func fk; + public Func josag; -// public int Lepesszam { get; set;} = 0; + public int Lepesszam { get; set;} = 0; -// public VisszalepesesOptimalizacio(int n, int[] M, T[,] R, Func ft, Func fk, Func josag) -// { -// this.n = n; -// this.M = M; -// this.R = R; -// this.ft = ft; -// this.fk = fk; -// this.josag = josag; -// } + public VisszalepesesOptimalizacio(int n, int[] M, T[,] R, Func ft, Func fk, Func josag) + { + this.n = n; + this.M = M; + this.R = R; + this.ft = ft; + this.fk = fk; + this.josag = josag; + } -// public T[] OptimalisMegoldas() -// { -// int szint = 0; -// T[] E = new T[n]; -// bool van = false; -// T[] O = new T[n]; -// Backtrack(szint, ref E, ref van, ref O); -// if (van) -// { -// return O; -// } -// else -// { -// throw new Exception("Nincs megoldas"); -// } + public T[] OptimalisMegoldas() + { + int szint = 0; + T[] E = new T[n]; + bool van = false; + T[] O = new T[n]; + Backtrack(szint, ref E, ref van, ref O); + if (van) + { + return O; + } + else + { + throw new Exception("Nincs megoldas"); + } -// } + } -// virtual public void Backtrack(int szint, ref T[] E, ref bool van, ref T[] O) -// { -// int i = 0; -// while(i < M[szint]) -// { -// Lepesszam++; -// i++; -// if (ft(szint, R[szint, i])) -// { -// if(fk(szint, R[szint, i], E)) -// { -// E[szint] = R[szint, i]; + virtual public void Backtrack(int szint, ref T[] E, ref bool van, ref T[] O) + { + int i = 0; + while(i < M[szint]) + { + Lepesszam++; + i++; + if (ft(szint, R[szint, i])) + { + if(fk(szint, R[szint, i], E)) + { + E[szint] = R[szint, i]; -// if (szint == n) -// { -// if ((!van) || josag(E) > josag(O)) -// { -// O = E; -// } -// van = true; -// } -// else -// { -// Backtrack(szint+1, ref E, ref van, ref O); -// } -// } -// } -// } -// } -// } -// public class VisszalepesesHatizsakPakolas -// { -// HatizsakProblema problema; -// public int LepesSzam {get; set;} + if (szint == n) + { + if ((!van) || josag(E) > josag(O)) + { + O = E; + } + van = true; + } + else + { + Backtrack(szint+1, ref E, ref van, ref O); + } + } + } + } + } + } + public class VisszalepesesHatizsakPakolas + { + HatizsakProblema problema; + public int LepesSzam {get; set;} -// public VisszalepesesHatizsakPakolas(HatizsakProblema problema) -// { -// this.problema = problema; -// } -// virtual public bool[] OptimalisMegoldas() -// { -// int[] M = new int[problema.N]; + public VisszalepesesHatizsakPakolas(HatizsakProblema problema) + { + this.problema = problema; + } + virtual public bool[] OptimalisMegoldas() + { + int[] M = new int[problema.N]; -// bool[,] R = new bool[problema.N, 2]; -// for (int i = 0; i < problema.N; i++) -// { -// M[i] = 2; -// R[i, 0] = true; -// R[i, 1] = false; -// } -// VisszalepesesOptimalizacio visszalepesesoptimalizacio = new VisszalepesesOptimalizacio(problema.N, M, R, Ft, Fk, Josag); -// bool[] eredmeny = visszalepesesoptimalizacio.OptimalisMegoldas(); -// LepesSzam = visszalepesesoptimalizacio.Lepesszam; -// return eredmeny; -// } -// public float OptimalisErtek() -// { -// return problema.OsszErtek(OptimalisMegoldas()); -// } -// private float Josag(bool[] pakolas) -// { -// float ertek = 0; -// if (!problema.Ervenyes(pakolas)) -// { -// ertek = -1; -// } -// else -// { -// ertek = problema.OsszErtek(pakolas); -// } -// return ertek; -// } -// private bool Ft(int egesz, bool logikai) -// { -// return true; -// } -// private bool Fk(int egesz, bool logikai, bool[] tomb) -// { -// int weight = 0; -// for (int i = 0; i < problema.N; i++) -// { -// if(tomb[i]) -// { -// weight += problema.W[i]; -// } -// } -// return (weight <= problema.Wmax); -// } + bool[,] R = new bool[problema.N, 2]; + for (int i = 0; i < problema.N; i++) + { + M[i] = 2; + R[i, 0] = true; + R[i, 1] = false; + } + VisszalepesesOptimalizacio visszalepesesoptimalizacio = new VisszalepesesOptimalizacio(problema.N, M, R, Ft, Fk, Josag); + bool[] eredmeny = visszalepesesoptimalizacio.OptimalisMegoldas(); + LepesSzam = visszalepesesoptimalizacio.Lepesszam; + return eredmeny; + } + public float OptimalisErtek() + { + return problema.OsszErtek(OptimalisMegoldas()); + } + private float Josag(bool[] pakolas) + { + float ertek = 0; + if (!problema.Ervenyes(pakolas)) + { + ertek = -1; + } + else + { + ertek = problema.OsszErtek(pakolas); + } + return ertek; + } + private bool Ft(int egesz, bool logikai) + { + return true; + } + private bool Fk(int egesz, bool logikai, bool[] tomb) + { + int weight = 0; + for (int i = 0; i < problema.N; i++) + { + if(tomb[i]) + { + weight += problema.W[i]; + } + } + return (weight <= problema.Wmax); + } -// } -// public class SzetvalasztasEsKorlatozasOptimalizacio : VisszalepesesOptimalizacio -// { -// public Func fb; -// public SzetvalasztasEsKorlatozasOptimalizacio(Func fb, int n, int[] M, T[,] R, Func ft, Func fk, Func josag) : base(n, M, R, ft, fk, josag) -// { -// this.fb = fb; -// } + } + public class SzetvalasztasEsKorlatozasOptimalizacio : VisszalepesesOptimalizacio + { + public Func fb; + public SzetvalasztasEsKorlatozasOptimalizacio(Func fb, int n, int[] M, T[,] R, Func ft, Func fk, Func josag) : base(n, M, R, ft, fk, josag) + { + this.fb = fb; + } -// public override void Backtrack(int szint, ref T[] E, ref bool van, ref T[] O) -// { -// int i = 0; -// while(i < M[szint]) -// { -// Lepesszam++; -// i++; -// if (ft(szint, R[szint, i])) -// { -// if(fk(szint, R[szint, i], E) && fb(szint, O) > 6) -// { -// E[szint] = R[szint, i]; + public override void Backtrack(int szint, ref T[] E, ref bool van, ref T[] O) + { + int i = 0; + while(i < M[szint]) + { + Lepesszam++; + i++; + if (ft(szint, R[szint, i])) + { + if(fk(szint, R[szint, i], E) && fb(szint, O) > 6) + { + E[szint] = R[szint, i]; -// if (szint == n) -// { -// if ((!van) || josag(E) > josag(O)) -// { -// O = E; -// } -// van = true; -// } -// else -// { -// Backtrack(szint+1, ref E, ref van, ref O); -// } -// } -// } -// } -// } -// } -// public class SzetvalasztasEsKorlatozasHatizsakPakolas : VisszalepesesHatizsakPakolas -// { -// public SzetvalasztasEsKorlatozasHatizsakPakolas(HatizsakProblema problema) : base(problema) -// { -// } -// public override bool[] OptimalisMegoldas() -// { -// bool[] asd = new bool[2] {true, true}; -// return asd; -// } -// } -// } + if (szint == n) + { + if ((!van) || josag(E) > josag(O)) + { + O = E; + } + van = true; + } + else + { + Backtrack(szint+1, ref E, ref van, ref O); + } + } + } + } + } + } + public class SzetvalasztasEsKorlatozasHatizsakPakolas : VisszalepesesHatizsakPakolas + { + public SzetvalasztasEsKorlatozasHatizsakPakolas(HatizsakProblema problema) : base(problema) + { + } + public override bool[] OptimalisMegoldas() + { + bool[] asd = new bool[2] {true, true}; + return asd; + } + } +} diff --git a/Tesztek/09_VisszalepesesKeresesTesztek.cs b/Tesztek/09_VisszalepesesKeresesTesztek.cs index 2591a7a..68c10d4 100644 --- a/Tesztek/09_VisszalepesesKeresesTesztek.cs +++ b/Tesztek/09_VisszalepesesKeresesTesztek.cs @@ -1,103 +1,103 @@ -// using NUnit.Framework; -// using OE.ALGA.Optimalizalas; +using NUnit.Framework; +using OE.ALGA.Optimalizalas; -// namespace OE.ALGA.Tesztek.Optimalizalas -// { -// [TestFixture(Category = "Optimalizalas", TestName = "09 - Visszalépéses Keresés Tesztek")] -// public class VisszalepesesKeresesTesztek -// { -// [TestCase] -// public void JegyzetbenLevoPeldaErtekTeszt() -// { -// HatizsakProblema problema = new HatizsakProblema(PakolasTesztEsetek.jegyzet_n, PakolasTesztEsetek.jegyzet_Wmax, PakolasTesztEsetek.jegyzet_w, PakolasTesztEsetek.jegyzet_p); -// VisszalepesesHatizsakPakolas opt = new VisszalepesesHatizsakPakolas(problema); -// Assert.Multiple(() => -// { -// Assert.That(opt.OptimalisErtek(), Is.EqualTo(PakolasTesztEsetek.jegyzet_optimalis_ertek)); -// Assert.That(opt.LepesSzam, Is.EqualTo(98)); -// }); -// } -// [TestCase] -// public void JegyzetbenLevoPeldaMegoldasTeszt() -// { -// HatizsakProblema problema = new HatizsakProblema(PakolasTesztEsetek.jegyzet_n, PakolasTesztEsetek.jegyzet_Wmax, PakolasTesztEsetek.jegyzet_w, PakolasTesztEsetek.jegyzet_p); -// VisszalepesesHatizsakPakolas opt = new VisszalepesesHatizsakPakolas(problema); -// Assert.Multiple(() => -// { -// Assert.That(opt.OptimalisMegoldas(), Is.EquivalentTo(PakolasTesztEsetek.jegyzet_optimalis_pakolas)); -// Assert.That(opt.LepesSzam, Is.EqualTo(98)); -// }); -// } -// [TestCase] -// public void NagyPeldaMegoldasTeszt() -// { -// HatizsakProblema problema = new HatizsakProblema(PakolasTesztEsetek.nagy_n, PakolasTesztEsetek.nagy_Wmax, PakolasTesztEsetek.nagy_w, PakolasTesztEsetek.nagy_p); -// VisszalepesesHatizsakPakolas opt = new VisszalepesesHatizsakPakolas(problema); -// Assert.Multiple(() => -// { -// Assert.That(opt.OptimalisErtek(), Is.EqualTo(PakolasTesztEsetek.nagy_optimalis_ertek)); -// Assert.That(opt.LepesSzam, Is.EqualTo(4832)); -// }); -// } -// [TestCase] -// public void LepesszamVizsgalat() -// { -// HatizsakProblema problema = new HatizsakProblema(PakolasTesztEsetek.nagy_n, PakolasTesztEsetek.nagy_Wmax, PakolasTesztEsetek.nagy_w, PakolasTesztEsetek.nagy_p); -// VisszalepesesHatizsakPakolas opt = new VisszalepesesHatizsakPakolas(problema); -// Assert.Multiple(() => -// { -// Assert.That(opt.OptimalisErtek(), Is.EqualTo(PakolasTesztEsetek.nagy_optimalis_ertek)); -// Assert.That(opt.LepesSzam, Is.EqualTo(4832)); -// }); -// } -// } +namespace OE.ALGA.Tesztek.Optimalizalas +{ + [TestFixture(Category = "Optimalizalas", TestName = "09 - Visszalépéses Keresés Tesztek")] + public class VisszalepesesKeresesTesztek + { + [TestCase] + public void JegyzetbenLevoPeldaErtekTeszt() + { + HatizsakProblema problema = new HatizsakProblema(PakolasTesztEsetek.jegyzet_n, PakolasTesztEsetek.jegyzet_Wmax, PakolasTesztEsetek.jegyzet_w, PakolasTesztEsetek.jegyzet_p); + VisszalepesesHatizsakPakolas opt = new VisszalepesesHatizsakPakolas(problema); + Assert.Multiple(() => + { + Assert.That(opt.OptimalisErtek(), Is.EqualTo(PakolasTesztEsetek.jegyzet_optimalis_ertek)); + Assert.That(opt.LepesSzam, Is.EqualTo(98)); + }); + } + [TestCase] + public void JegyzetbenLevoPeldaMegoldasTeszt() + { + HatizsakProblema problema = new HatizsakProblema(PakolasTesztEsetek.jegyzet_n, PakolasTesztEsetek.jegyzet_Wmax, PakolasTesztEsetek.jegyzet_w, PakolasTesztEsetek.jegyzet_p); + VisszalepesesHatizsakPakolas opt = new VisszalepesesHatizsakPakolas(problema); + Assert.Multiple(() => + { + Assert.That(opt.OptimalisMegoldas(), Is.EquivalentTo(PakolasTesztEsetek.jegyzet_optimalis_pakolas)); + Assert.That(opt.LepesSzam, Is.EqualTo(98)); + }); + } + [TestCase] + public void NagyPeldaMegoldasTeszt() + { + HatizsakProblema problema = new HatizsakProblema(PakolasTesztEsetek.nagy_n, PakolasTesztEsetek.nagy_Wmax, PakolasTesztEsetek.nagy_w, PakolasTesztEsetek.nagy_p); + VisszalepesesHatizsakPakolas opt = new VisszalepesesHatizsakPakolas(problema); + Assert.Multiple(() => + { + Assert.That(opt.OptimalisErtek(), Is.EqualTo(PakolasTesztEsetek.nagy_optimalis_ertek)); + Assert.That(opt.LepesSzam, Is.EqualTo(4832)); + }); + } + [TestCase] + public void LepesszamVizsgalat() + { + HatizsakProblema problema = new HatizsakProblema(PakolasTesztEsetek.nagy_n, PakolasTesztEsetek.nagy_Wmax, PakolasTesztEsetek.nagy_w, PakolasTesztEsetek.nagy_p); + VisszalepesesHatizsakPakolas opt = new VisszalepesesHatizsakPakolas(problema); + Assert.Multiple(() => + { + Assert.That(opt.OptimalisErtek(), Is.EqualTo(PakolasTesztEsetek.nagy_optimalis_ertek)); + Assert.That(opt.LepesSzam, Is.EqualTo(4832)); + }); + } + } -// [TestFixture(Category = "Optimalizalas", TestName = "09 - Szétválasztás és Korlátozás Tesztek")] -// public class SzetvalasztasEsKorlatozasTesztek -// { -// [TestCase] -// public void JegyzetbenLevoPeldaErtekTeszt() -// { -// HatizsakProblema problema = new HatizsakProblema(PakolasTesztEsetek.jegyzet_n, PakolasTesztEsetek.jegyzet_Wmax, PakolasTesztEsetek.jegyzet_w, PakolasTesztEsetek.jegyzet_p); -// SzetvalasztasEsKorlatozasHatizsakPakolas opt = new SzetvalasztasEsKorlatozasHatizsakPakolas(problema); -// Assert.Multiple(() => -// { -// Assert.That(opt.OptimalisErtek(), Is.EqualTo(PakolasTesztEsetek.jegyzet_optimalis_ertek)); -// Assert.That(opt.LepesSzam, Is.EqualTo(62)); -// }); -// } -// [TestCase] -// public void JegyzetbenLevoPeldaMegoldasTeszt() -// { -// HatizsakProblema problema = new HatizsakProblema(PakolasTesztEsetek.jegyzet_n, PakolasTesztEsetek.jegyzet_Wmax, PakolasTesztEsetek.jegyzet_w, PakolasTesztEsetek.jegyzet_p); -// SzetvalasztasEsKorlatozasHatizsakPakolas opt = new SzetvalasztasEsKorlatozasHatizsakPakolas(problema); -// Assert.Multiple(() => -// { -// Assert.That(opt.OptimalisMegoldas(), Is.EquivalentTo(PakolasTesztEsetek.jegyzet_optimalis_pakolas)); -// Assert.That(opt.LepesSzam, Is.EqualTo(62)); -// }); -// } -// [TestCase] -// public void NagyPeldaMegoldasTeszt() -// { -// HatizsakProblema problema = new HatizsakProblema(PakolasTesztEsetek.nagy_n, PakolasTesztEsetek.nagy_Wmax, PakolasTesztEsetek.nagy_w, PakolasTesztEsetek.nagy_p); -// SzetvalasztasEsKorlatozasHatizsakPakolas opt = new SzetvalasztasEsKorlatozasHatizsakPakolas(problema); -// Assert.Multiple(() => -// { -// Assert.That(opt.OptimalisErtek(), Is.EqualTo(PakolasTesztEsetek.nagy_optimalis_ertek)); -// Assert.That(opt.LepesSzam, Is.EqualTo(618)); -// }); -// } -// [TestCase] -// public void LepesszamVizsgalat() -// { -// HatizsakProblema problema = new HatizsakProblema(PakolasTesztEsetek.nagy_n, PakolasTesztEsetek.nagy_Wmax, PakolasTesztEsetek.nagy_w, PakolasTesztEsetek.nagy_p); -// SzetvalasztasEsKorlatozasHatizsakPakolas opt = new SzetvalasztasEsKorlatozasHatizsakPakolas(problema); -// Assert.Multiple(() => -// { -// Assert.That(opt.OptimalisErtek(), Is.EqualTo(PakolasTesztEsetek.nagy_optimalis_ertek)); -// Assert.That(opt.LepesSzam, Is.EqualTo(618)); -// }); -// } -// } -// } + [TestFixture(Category = "Optimalizalas", TestName = "09 - Szétválasztás és Korlátozás Tesztek")] + public class SzetvalasztasEsKorlatozasTesztek + { + [TestCase] + public void JegyzetbenLevoPeldaErtekTeszt() + { + HatizsakProblema problema = new HatizsakProblema(PakolasTesztEsetek.jegyzet_n, PakolasTesztEsetek.jegyzet_Wmax, PakolasTesztEsetek.jegyzet_w, PakolasTesztEsetek.jegyzet_p); + SzetvalasztasEsKorlatozasHatizsakPakolas opt = new SzetvalasztasEsKorlatozasHatizsakPakolas(problema); + Assert.Multiple(() => + { + Assert.That(opt.OptimalisErtek(), Is.EqualTo(PakolasTesztEsetek.jegyzet_optimalis_ertek)); + Assert.That(opt.LepesSzam, Is.EqualTo(62)); + }); + } + [TestCase] + public void JegyzetbenLevoPeldaMegoldasTeszt() + { + HatizsakProblema problema = new HatizsakProblema(PakolasTesztEsetek.jegyzet_n, PakolasTesztEsetek.jegyzet_Wmax, PakolasTesztEsetek.jegyzet_w, PakolasTesztEsetek.jegyzet_p); + SzetvalasztasEsKorlatozasHatizsakPakolas opt = new SzetvalasztasEsKorlatozasHatizsakPakolas(problema); + Assert.Multiple(() => + { + Assert.That(opt.OptimalisMegoldas(), Is.EquivalentTo(PakolasTesztEsetek.jegyzet_optimalis_pakolas)); + Assert.That(opt.LepesSzam, Is.EqualTo(62)); + }); + } + [TestCase] + public void NagyPeldaMegoldasTeszt() + { + HatizsakProblema problema = new HatizsakProblema(PakolasTesztEsetek.nagy_n, PakolasTesztEsetek.nagy_Wmax, PakolasTesztEsetek.nagy_w, PakolasTesztEsetek.nagy_p); + SzetvalasztasEsKorlatozasHatizsakPakolas opt = new SzetvalasztasEsKorlatozasHatizsakPakolas(problema); + Assert.Multiple(() => + { + Assert.That(opt.OptimalisErtek(), Is.EqualTo(PakolasTesztEsetek.nagy_optimalis_ertek)); + Assert.That(opt.LepesSzam, Is.EqualTo(618)); + }); + } + [TestCase] + public void LepesszamVizsgalat() + { + HatizsakProblema problema = new HatizsakProblema(PakolasTesztEsetek.nagy_n, PakolasTesztEsetek.nagy_Wmax, PakolasTesztEsetek.nagy_w, PakolasTesztEsetek.nagy_p); + SzetvalasztasEsKorlatozasHatizsakPakolas opt = new SzetvalasztasEsKorlatozasHatizsakPakolas(problema); + Assert.Multiple(() => + { + Assert.That(opt.OptimalisErtek(), Is.EqualTo(PakolasTesztEsetek.nagy_optimalis_ertek)); + Assert.That(opt.LepesSzam, Is.EqualTo(618)); + }); + } + } +}