mirror of
https://github.com/Lendaia/oe-alga-feladatok.git
synced 2026-04-23 04:16:32 +01:00
119 lines
3.2 KiB
C#
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()
|
|
{
|
|
|
|
}
|
|
}
|
|
}
|