Visszalépéses keresés (c#)?
Sziasztok az alábbi problémám áll fenn:
van egy Feladat[] feladatok tömböm
a Feladat osztályom tartalmaz egy int Ertek tulajdonságot(megmutatja hogy mennyi az értéke az egyes Feladatoknak) és egy listát (meg sok egyebet, ami most lényegtelen), amibe Ember objektumokat lehet beletenni, ennek a listának a neve AkikElvegezhetikAFeladatot. Különböző feltételek alapján kiválogattam, hogy kik vehetik fel a bizonyosok feladatokat. szóval a feladatok[0].AkikElvegezhetikAFeladatot[0] rámutat arra az Ember objektumra, aki eltudja végezni a 0. indexű feladatot.
Az Ember osztályban van string Nev meg egy int eddigiErtekek tulajdonsagom, a feladat az lenne, hogy (ezt feltöltöm nagyon sok adattal az addig megvan, meg a nagyrésze is csak a keresésben akadtam el) visszalépéses kereséssel megtalálni az összes megoldást, úgy, hogy egy ilyen Ember objektum-nak az eddigiErtekek tulajdonsag maximum 2000 lehet.
Igazából már alap ötleteknek is örülnék, neten néztem példákat, fűrész fogas tömbökben megvalósítottam egy példát a visszalépéses keresésre ami arra a problémára megadja az összes megoldást, de ezt valahogy még nem látom át.
En Map-be pakoltam az eredmenyt, meg ez Java, de a lenyeget megerted gondolom:
Nem teszteltem.
class Work
{
public string jobName;
public int jobValue;
public List<People> workersWhoCanDoActualWork;
public Work(string jobName, int jobValue)
{
this.jobName = jobName;
this.jobValue = jobValue;
workersWhoCanDoActualWork = new List<People>();
}
}
class People
{
public string peopleName;
public int actualValue;
public People(string peopleName)
{
this.peopleName = peopleName;
actualValue = 0;
}
}
static class RandomNumber
{
public static Random rnd = new Random();
}
class Program
{
static void Main(string[] args)
{
int x = 0;
Work[] works = new Work[20];
while (x < works.Length)
{
Work actualWork = new Work((((char)RandomNumber.rnd.Next('A', 'Z')).ToString())
+ ((char)RandomNumber.rnd.Next('A', 'Z')).ToString() +
((char)RandomNumber.rnd.Next('A', 'Z')).ToString() +
((char)RandomNumber.rnd.Next('A', 'Z')).ToString(),
RandomNumber.rnd.Next(100, 1500)
);
if (!works.Contains(actualWork))
{
works[x] = actualWork;
x++;
}
}
for (int i = 0; i < works.Length; i++)
{
//With random name and values
works[i] = new Work((((char)RandomNumber.rnd.Next('A', 'Z')).ToString())
+ ((char)RandomNumber.rnd.Next('A', 'Z')).ToString() +
((char)RandomNumber.rnd.Next('A', 'Z')).ToString() +
((char)RandomNumber.rnd.Next('A', 'Z')).ToString(),
RandomNumber.rnd.Next(100, 1500)
);
}
People[] peoples = new People[100];
x = 0;
while (x < peoples.Length)
{
People actualPeople = new People((((char)RandomNumber.rnd.Next('A', 'Z')).ToString())
+ ((char)RandomNumber.rnd.Next('A', 'Z')).ToString() +
((char)RandomNumber.rnd.Next('A', 'Z')).ToString() +
((char)RandomNumber.rnd.Next('A', 'Z')).ToString());
if (!peoples.Contains(actualPeople))
{
peoples[x] = actualPeople;
x++;
}
}
for (int i = 0; i < works.Length; i++)
{
int random = RandomNumber.rnd.Next(1, 41);
for (int j = 0; j < random; j++)
{
int randomPeopleIndex = RandomNumber.rnd.Next(0, peoples.Length);
if ( ! works[i].workersWhoCanDoActualWork.Contains( peoples[randomPeopleIndex] ))
{
works[i].workersWhoCanDoActualWork.Add(peoples[randomPeopleIndex]);
}
}
}
}
}
}
Legeneráltam egy példa esetet, így szerintem már látszik, hogy mit akarok. A feladat hogy megtaláljam az összes lehetséges megoldást visszalépéses kereséssel. A munkának van egy értéke amit a People megkap ha elvégzi a munkát. Egy emberke több munkát is megcsinálhat akár az összeset is ha keveset fizetnek érte, annyi a megkötés csak, hogy maximum 2000 összértékben végezhet munkát ami az actualValue tulajdonság.
Szóval az eredmény egy List<People[]> osszesMO = new List<People[]>();
Ebben a listában az egyes People[] tömbök mérete megegyezik azzal ugye ahány munka van, works.Length. Szerintem már túl magyarázom...
Ott van az elozo valaszomban implementalva a lenyeg. Annyi, hogy te List-be akarod osszeszedni a lehetseges megoldasokat, en meg Map-be raktam oket, de az reszletkerdes.
Most hol akadtal el, mi nem megy?
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!