2016-04-24 34 views
0

我想製作一個程序,告訴我需要採取的步驟,需要記住的事項是: 從節點1到其他有一個顏色(紅色,棕色,黃色)必須位於這個命令,每一步。 現在我可以用顏色去做,但事情是,我不知道如何回到最後一步,並選擇不同的節點,如果我不能繼續前進。 這是我的代碼:檢查其他可能性PROLOG

知識庫:

[![link(b,brown,j). 
link(b,red,d). 
link(j,red,n). 
link(j,brown,l). 
link(i,yellow,b). 
link(i,yellow,d). 
link(i,red,t). 
link(d,yellow,j). 
link(d,red,k). 
link(k,yellow,j). 
link(k,red,l). 
link(k,brown,r). 
link(l,brown,n). 
link(l,yellow,p). 
link(p,yellow,n). 
link(t,brown,d). 
link(t,red,k). 
link(t,brown,h). 
link(g,red,k). 
link(r,yellow,l). 
link(r,brown,p). 
link(r,yellow,s). 
link(c,brown,i). 
link(c,red,t). 
link(c,brown,a). 
link(a,yellow,t). 
link(a,red,h). 
link(a,red,m). 
link(h,red,r). 
link(h,yellow,e). 
link(e,yellow,r). 
link(e,brown,s). 
link(e,red,f). 
link(s,red,p). 
link(v,yellow,c). 
link(v,brown,a). 
link(v,red,m). 
link(m,brown,h). 
link(m,brown,e). 
link(m,yellow,f). 
link(f,brown,s). 
link(start,red,m).][1]][1] 

ON CALL 12男,BROWN,H不言而喻,但它具有M,布朗,E. 永不熄滅,我應該怎麼爲了讓PROLOG在這個地方回來並採取另一個節點。

任何幫助感謝。 trace

trace

回答

0

好,那奇怪的,沒人接!

但我破解了,它這個樣子,

maze_steps(A,B) :- 
    go(A,B,red,[]). 

next_color(A,B,Cr,Visited):- 
    Cr = red -> go(A,B, brown, Visited); 
    Cr = brown -> go(A,B, yellow, Visited); 
    Cr = yellow -> go(A,B, red, Visited). 

go(A,B,Cr,Visited):- 
    (link(X, Cr, A); link(A, Cr, X)), 
    (\+(member(A+Cr+X,Visited)), \+(member(X+Cr+A,Visited))), 
    (B = X, write([A+Cr+X|Visited]), write('\n'); next_color(X,B,Cr,[A+Cr+X|Visited])). 

問題解決了,反正感謝。

相關問題