Kezdőoldal » Számítástechnika » Programozás » Visszalépéses keresés (c#)?

Visszalépéses keresés (c#)?

Figyelt kérdés

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.



2021. ápr. 21. 12:56
1 2
 11/17 anonim ***** válasza:
76%

En Map-be pakoltam az eredmenyt, meg ez Java, de a lenyeget megerted gondolom:

[link]

Nem teszteltem.

2021. ápr. 21. 16:42
Hasznos számodra ez a válasz?
 12/17 A kérdező kommentje:

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]);

}

}

}



}

}

}

2021. ápr. 21. 18:44
 13/17 A kérdező kommentje:

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...

2021. ápr. 21. 18:48
 14/17 anonim ***** válasza:
63%

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?

2021. ápr. 21. 18:53
Hasznos számodra ez a válasz?
 15/17 A kérdező kommentje:
elsiklottam felette, megnézem, köszi :D
2021. ápr. 21. 18:55
 16/17 A kérdező kommentje:
Huhh nagy nehezen de megoldottam. Java kódot igazából csak minimálisan értettem mert soha nem kódoltam semmit benne, de annak is hála észrevettem egy hibát, hogy referenciákat adok át és nem értékeket másolok, szóval az nagy segítség volt!
2021. ápr. 21. 20:59
 17/17 A kérdező kommentje:
Ohh és az az ötlet is tetszett, hogy a személyben egy capacity legyen! Szóval tényleg köszi.
2021. ápr. 21. 21:03
1 2

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!