Wątek przeniesiony 2016-02-14 03:34 z C# i .NET przez somekind.

Rekurencja - MinMax

0
   MINI-MAX(sytuacja, gracz, głębokość)
     . . if głębokość > limit_głębokości then
     . . . return OCEŃ_SYTUACJĘ(sytuacja)

     . . r = WYGENERUJ_MOŻLIWE_RUCHY(sytuacja, gracz)

     . . if gracz = 0
     . . . minimax := 0
     . . else
     . . . minimax := inf

     . . . foreach x in r
     . . . . sytuacja' := WYKONAJ_RUCH(sytuacja, x)
     . . . . t := MINI-MAX(sytuacja, PRZECIWNIK(gracz), głębokość + 1)
     . . . . if gracz = 0 and t > minimax then
     . . . . . minimax:=t
     . . . . else if gracz = 1 and t < minimax then
     . . . . . minimax:=t

     . . return minimax 

Funkcja kilkukrotnie zwraca mi wartość return Ocen_Sytuację(sytuacja) z racji generowania innych możliwości ruchu(WYKONAJ RUCH). Zależy mi tylko na tym pierwszym returnie,ponieważ dotarcie do poszczególnych returnów na dobrą chwilę zajmuje niepotrzebnie program. Chce, więc uzyskać jeden liść, a nie całą serię liści z tego drzewa. Czy istnieje jakieś rozwiązanie, którego nie znam aby pominąć pozostałe dotarcia do returnu? Problem zapewne można rozwiązać jakoś prosto ;)

0

Co to ma wspólnego z C#?

0

Wtedy Nie będzie to MIN_MAX.

PIERWSZY_LEPSZY_STAN(sytuacja, gracz, głębokość)
 . if głębokość > limit_głębokości then return OCEŃ_SYTUACJĘ(sytuacja)
 . r = WYGENERUJ_JEDEN_MOŻLIWY_RUCH(sytuacja,gracz)
 . sytuacja' := WYKONAJ_RUCH(sytuacja, r)
 . return PIERWSZY_LEPSZY_STAN(sytuacja',PRZECIWNIK(gracz),głębokość + 1)

1 użytkowników online, w tym zalogowanych: 0, gości: 1