2012-05-26 2 views
2

Я пытаюсь сделать Башни Ханоя проблемы, что я пытался до сих пор:Hanoi Tower (Башни Ханоя)

move(1,[H|T],B,C,A1,B1,C) :- 
    A1 = T, 
    B1 = [H|B]. 
move(N,A,B,C,A1,B1,C) :- 
N>1, 
M is N-1, 
move(M,[H|T],C,B,A1,B1,C), 
move(1,[H|T],B,_,A1,B1,C), 
move(M,C,B,[H|T],A1,B1,C). 

но этот код не работает, мне нужно получить результат выглядит например:

?-move(3,[1,2,3],[],[],A1,B1,C). 
    and the results: 
    A1=[]. 
    B1=[1,2,3] 
    C=[]. 

Может кто-нибудь помочь мне исправить мой код и получить такой результат? Это очень важно для меня, мне очень нужна помощь. это то, что я сделал, но с некоторыми проблемами:

move(N,[H|T],[],[],A1,B1,C) :- 
     N > 1, 
     M is N - 1, 
     move(N,[H|M],[H|_],[],A1,B1,C), 
     move(M,[_|M],[H|_],[H|_],A1,B1,C), 
     move(M,[_|M],[],[H|T],A1,B1,C), 
     move(M,[],[_|T],[H|T],A1,B1,C), 
     move(M,[H|_],[_|T],[H|T],A1,B1,C), 
     move(M,[H|_],[_|T],[],A1,B1,C), 
     move(M,[],[H|T],[],A1,B1,C). 
     move(N,[H|T],[],[]) :- write(A1), nl, 
          write(B1), nl, 
          write(C). 

ответ

4

Это инструкция по указанию решения башни проблемы Ханоя.

move(1,X,Y,_) :- 
     write('Move top disk from '), 
     write(X), 
     write(' to '), 
     write(Y), 
     nl. 
    move(N,X,Y,Z) :- 
     N>1, 
     M is N-1, 
     move(M,X,Z,Y), 
     move(1,X,Y,_), 
     move(M,Z,Y,X). 

Атака проблема таким образом: В инструкции по решению инструкции мы не изменим содержимое X, Y или Z. Но в ваших проблемах, вы в конечном итоге изменить содержимое них.

UPDATE: Поскольку он заявил, что это не домашнее задание вопрос, вот полный ответ:

towersOfHanoi(N,A,B,C,A4,B4,C4) :- move(N,A,B,C,A4,B4,C4),!. 

move(1,[H|T],B,C,A1,B1,C1) :- A1 = T, 
           B1 = [H|B], 
           C1 = C. 
move(N,A,B,C,A4,B4,C4) :- N>1, 
          M is N-1, 
          move(M,A,C,B,A1,C1,B1), 
          move(1,A1,B1,C1,A2,B2,C2), 
          move(M,C2,B2,A2,C4,B4,A4). 
+0

извините, я помечать это неправильно, это не домашнее задание, это один вопрос прошлого экзамена. если вы можете дать мне полные ответы, у меня есть экзамен на следующей неделе. извините за это – user1400451

+0

@ user1400451 обновлено для полного ответа –

+0

i youht я могу использовать свой путь, но я не знаю, где не так, потому что я просто следую инструкциям, чтобы написать код – user1400451

 Смежные вопросы

  • Нет связанных вопросов^_^