2012-05-26 6 views
2

내가 하노이 문제의 타워를 할 노력하고있어는, 내가 지금까지 시도 :하노이 타워 (하노이 타워)

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

에 대한 업데이 트를 할 수 있습니다 나는 내 길을 사용할 수 있지만, 난 그냥 코드를 작성하는 단계를 수행하기 때문에, 내가 잘못 알고있어 – user1400451