Hỏi đáp Bài toán người nông dân sang sông?

Thảo luận trong 'Lập trình máy tính' bắt đầu bởi bin_kute, 13 Tháng một 2013.

  1. Offline

    bin_kute

    • Thành Viên Mới

    Số bài viết:
    14
    Đã được thích:
    4
    Điểm thành tích:
    0
    Bài toán:
    Một người nông dân có với một con trâu, một con hổ và một bó cỏ bên bờ sông. Ông ta muốn tất cả cùng sang bờ bên kia. Người nông dân chỉ có một chiếc thuyền và thuyền ngoài người nông dân chỉ chở được thêm 1 trong 3 vật trên. Không được để chỉ có con trâu và con hổ cùng ở một bên bờ sông vì hổ có thể ăn thịt trâu, tương tự đối với con trâu và bó cỏ. Làm thế nào để tất cả cùng qua sông?

    Mọi người giúp mình code c++ và prolog của bài này với ạ
    Xin cảm ơn nhiều
  2. Offline

    tran dinh hau

    • Thành Viên Mới

    Số bài viết:
    1
    Đã được thích:
    1
    Điểm thành tích:
    0
    1 : trau
    2 : hổ . Đem trâu trở về
    3 : bó cỏ
    4 : trâu
    1+2+3+4=> xong
    fanyhtqb10 thích bài này.
  3. Offline

    hongoctrien

    • Friends

    Số bài viết:
    2.449
    Đã được thích:
    2.464
    Điểm thành tích:
    2.431
    Vấn đề của bạn ấy là code C++ hoặc prolog đó bạn
    --- Nhập chung bài viết, 23 Tháng một 2013 ---
    Prolog của bạn đây, nhưng không phải Nông dân - trâu - hổ - cỏ mà là Nông dân - dê - sói- bắp cải nhé.

    Mã:
    %%%
    %%% This is one of the example programs from the textbook:
    %%%
    %%% Artificial Intelligence:
    %%% Structures and strategies for complex problem solving
    %%%
    %%% by George F. Luger and William A. Stubblefield
    %%%
    %%% These programs are copyrighted by Benjamin/Cummings Publishers.
    %%%
    %%% We offer them for use, free of charge, for educational purposes only.
    %%%
    %%% Disclaimer: These programs are provided with no warranty whatsoever as to
    %%% their correctness, reliability, or any other property.  We have written
    %%% them for specific educational purposes, and have made no effort
    %%% to produce commercial quality computer programs.  Please do not expect
    %%% more of them then we have intended.
    %%%
    %%% This code has been tested with SWI-Prolog (Multi-threaded, Version 5.2.13)
    %%% and appears to function as intended.
     
    /*
    * This is the code for the Farmer, Wolf, Goat and Cabbage Problem
    * using the ADT Stack.
    *
    * Run this code by giving PROLOG a "go" goal.
    * For example, to find a path from the west bank to the east bank,
    * give PROLOG the query:
    *
    *  go(state(w,w,w,w), state(e,e,e,e)).
    */
     
    :- [adts]. /* consults (reconsults) file containing the
              various ADTs (Stack, Queue, etc.) */
     
    go(Start,Goal) :-
        empty_stack(Empty_been_stack),
        stack(Start,Empty_been_stack,Been_stack),
        path(Start,Goal,Been_stack).
     
    /*
    * Path predicates
    */
     
    path(Goal,Goal,Been_stack) :-
        write('Solution Path Is:' ), nl,
        reverse_print_stack(Been_stack).
     
    path(State,Goal,Been_stack) :-
        move(State,Next_state),
        not(member_stack(Next_state,Been_stack)),
        stack(Next_state,Been_stack,New_been_stack),
        path(Next_state,Goal,New_been_stack),!.
     
    /*
    * Move predicates
    */
     
    move(state(X,X,G,C), state(Y,Y,G,C))
                  :- opp(X,Y), not(unsafe(state(Y,Y,G,C))),
                    writelist(['try farmer takes wolf',Y,Y,G,C]).
     
    move(state(X,W,X,C), state(Y,W,Y,C))
                  :- opp(X,Y), not(unsafe(state(Y,W,Y,C))),
                    writelist(['try farmer takes goat',Y,W,Y,C]).
     
    move(state(X,W,G,X), state(Y,W,G,Y))
                  :- opp(X,Y), not(unsafe(state(Y,W,G,Y))),
                    writelist(['try farmer takes cabbage',Y,W,G,Y]).
     
    move(state(X,W,G,C), state(Y,W,G,C))
                  :- opp(X,Y), not(unsafe(state(Y,W,G,C))),
                    writelist(['try farmer takes self',Y,W,G,C]).
     
    move(state(F,W,G,C), state(F,W,G,C))
                  :- writelist(['      BACKTRACK from:',F,W,G,C]), fail.
     
    /*
    * Unsafe predicates
    */
     
    unsafe(state(X,Y,Y,C)) :- opp(X,Y).
    unsafe(state(X,W,Y,Y)) :- opp(X,Y).
     
    /*
    * Definitions of writelist, and opp.
    */
     
    writelist([]) :- nl.
    writelist([H|T]):- print(H), tab(1),  /* "tab(n)" skips n spaces. */
                      writelist(T).
     
    opp(e,w).
    opp(w,e).
     
    reverse_print_stack(S) :-
            empty_stack(S).
    reverse_print_stack(S) :-
            stack(E, Rest, S),
            reverse_print_stack(Rest),
            write(E), nl.
    
    white.smutNguyen Van Phuc thích bài này.
  4. Offline

    vOthIEn

    • Windows 1.0

    Số bài viết:
    19
    Đã được thích:
    10
    Điểm thành tích:
    10
    Có code C++ không bạn
    --- Nhập chung bài viết, 23 Tháng hai 2013 ---
  5. Offline

    tangvanbinh

    • Đội cứu hộ máy tính

    Số bài viết:
    449
    Đã được thích:
    197
    Điểm thành tích:
    140
    uh có ai viết báo cáo môn này chưa...giúp vs ....

Chia sẻ trang này

Advertising: Linux system admin | nukeviet | nukeviet 4 | Upload ảnh miễn phí