logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Algorytm generujący i weryfikujący rozwiązania problemu Wilk-Koza-Kapusta

crooveck 10 Sty 2011 03:47 1946 2
REKLAMA
  • #1 8984946
    crooveck
    Poziom 10  
    Posty: 36
    Ocena: 2
    Cześć
    Mam do napisania program rozwiązujący problem Wilk-Koza-Kapusta.

    Opis problemu:
    Na jednym brzegu rzeki jest wilk, koza i kapusta. Rolnik dysponuje łodzią o pojemności 2 (jest miejsce dla rolnika+jedno dodatkowe). Rolnik musi przewieźć na drugą stronę rzeki cały swój inwentarz. Nie może jednak dopuścić do sytuacji, gdy na brzegu zostanie para Wilk-Koza lub Koza-Kapusta (wilk zje kozę, koza zje kapustę).

    Podstawowe rozwiązanie tego problemu jest powszechnie znane i trywialne. Moim zadaniem natomiast jest zaprojektowanie algorytmu generującego różne możliwe rozwiązania tego problemu dla zwielokrotnionych danych oraz drugiego programu weryfikującego prawidłowość wygenerowanych rozwiązań. Przykładowo może być więcej niż jeden wilk, więcej niż jedna koza lub więcej niż jedna kapusta. Na dodatek może być więcej niż jedno wolne miejsce w łódce.

    Pierwszy pomysł jaki mi przyszedł do głowy, uogólnienie tego problemu do teorii grafów.
    Weźmy na przykład graf (reprezentujący lewy brzeg rzeki) L(V,E) w którym zbiór wierzchołków V={Wilk, Koza, Kapusta...} natomiast zbiór krawędzi E={{Wilk,Koza}, {Koza,Kapusta}...}.
    Przedstawiając odpowiednią sekwencję ruchów musimy utworzyć graf (reprezentujący prawy brzeg rzeki) P(V',E'). Należy to zrobić w taki sposób aby za każdym razem gdy rolnik na łodzi opuszcza brzeg, pozostały na nim same wilki albo same kapusty albo same kozy albo wilki i kapusty. W innym przypadku zawsze coś zostanie zjedzone.

    Podsumowując, poszukuję propozycji algorytmów (wydaje mi się, że z teorii grafów, ale być może lepsze będą jakieś inne...) rozwiązujących problem usuwania poszczególnych wierzchołków grafu (drzewa?). W zasadzie w tym miejscu moje pomysły się kończą ;)

    Dzięki za pomoc
    Pozdrawiam

    Proszę, zgodnie z regulaminem pkt 11.1, o usunięcie słów PROBLEM lub/i POMOC z tytułu. Prośba dotyczy także wszelkich wariacji typu: kłopot, pomocy, problemy itd.
    Równocześnie proszę o uściślenie, o jaki język programowania koledze chodzi.
    - arnoldziq
  • REKLAMA
  • #2 8984994
    cepilek
    Poziom 26  
    Posty: 901
    Pomógł: 62
    Ocena: 193
    Widać, że nie mogłeś spać, trzeba było liczyć barany a nie kozy, wilki czy kapustę... Od razu nasuwa się wniosek, że musisz którymś razem zawieźć same kozy do wilków i kapusty, więc musisz mieć tyle miejsca na łódce aby się same kozy zmieściły, więc nie myśl a buduj po nocach takie łodzie.. :) No i nie używaj drzew, bo kozy wejdą na nie, zwłaszcza gdy będą pochyłe i zjedzą je z braku kapusty...
    Moderowany przez arnoldziq:

    Dziękujemy, ze te wielce odkrywcze dywagacje na temat budowy łodzi. Zwłaszcza ujęły mnie za serce, wywody na temat wyższości łodzi kompozytowych nad łodziami drewnianymi. Ostrzeżenie #3

  • #3 8985619
    sevare
    Poziom 14  
    Posty: 57
    Pomógł: 8
    Ocena: 4
    do moderatora: arnoldziq, jezeli dobrze zrozumialem o co Panu chodzi to uscislenie jezyka programowania jest nie potrzebne - chodzi o rozwiazanie problemu zatem podanie algorytmu rozwiazujacego a nie pelnego kodu.

    Co do samego rozwiazania problemu - pytanie czy chodzi ci tylko i wylacznie o wszystkie odpowiedzi czy zlozonosc obliczeniowa/pamieciowa rowniez maja znaczenie? Skoro ilosc koz/wilkow/kapust moze byc wieksza niz 1 to czy rozwazymy przypadki gdy elementow bedzie szacowalne przez 10^2 czy moze 10^10? dla 1. przypadku wystarczy zastosowanie zwyklego brute-force z dodanymi ograniczeniami i czas powinien byc zadowalajacy. Dla naprawde duzych liczb to polecam zaznajomic sie z teoria wiezow i rekursja ogonowa
REKLAMA