Files
ALGA/ALGA/Optimalizalas/09_VisszalepesesKereses.cs
Lendaia Mirai ac894d978c s
2025-11-27 21:27:09 +01:00

119 lines
3.2 KiB
C#

using System;
using System.Linq;
using Microsoft.Identity.Client;
namespace OE.ALGA.Optimalizalas
{
public class VisszalepesesOptimalizacio<T>
{
int n;
int[] M;
T[,] R;
Func<int, T, bool> ft;
Func<int, T, T[], bool> fk;
Func<T[], int> josag;
public int Lepesszam { get; set;} = 0;
public VisszalepesesOptimalizacio(int n, int[] M, T[,] R, Func<int, T, bool> ft, Func<int, T, T[], bool> fk, Func<T[], int> josag)
{
this.n = n;
this.M = M;
this.R = R;
this.ft = ft;
this.fk = fk;
this.josag = josag;
}
public bool[] 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];
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;}
public VisszalepesesHatizsakPakolas(HatizsakProblema problema)
{
this.problema = problema;
}
virtual public bool[] OptimalisMegoldas()
{
int[] M;
bool[] R;
}
public int OptimalisErtek()
{
}
}
public class SzetvalasztasEsKorlatozasOptimalizacio<T> : VisszalepesesOptimalizacio<T>
{
public Func<int, T[], int> fb;
public SzetvalasztasEsKorlatozasOptimalizacio(Func<int, T[], int> fb, int n, int[] M, T[,] R, Func<int, T, bool> ft, Func<int, T, T[], bool> fk, Func<T[], int> josag) : base(n, M, R, ft, fk, josag)
{
this.fb = fb;
}
public override void Backtrack(int szint, T[] E, bool van, T[] O)
{
}
}
public class SzetvalasztasEsKorlatozasHatizsakPakolas : VisszalepesesHatizsakPakolas
{
public SzetvalasztasEsKorlatozasHatizsakPakolas(HatizsakProblema problema) : base(problema)
{
}
public override bool[] OptimalisMegoldas()
{
}
}
}