home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 5 / DATAFILE_PDCD5.iso / utilities / b / binprolog / !BinPro330 / progs / ham < prev    next >
Encoding:
Text File  |  1995-01-20  |  1004 b   |  59 lines

  1. % benchmark by D. Diaz from the WAMCC distribution
  2. % slightly modified to remove irrelevant output by Paul tarau
  3.  
  4. go:-     statistics(runtime,_), 
  5.     ham,
  6.     statistics(runtime,[_,Y]), 
  7.     write('Hamilton benchmark time : '), write(Y), nl.
  8.  
  9. ham:-cycle_ham([a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t],_),fail.
  10. ham.
  11.  
  12.  
  13. cycle_ham([X|Y],[X,T|L]):-
  14.     chain_ham([X|Y],[],[T|L]),
  15.     edge(T,X).
  16.  
  17.  
  18. chain_ham([X],L,[X|L]).
  19. chain_ham([X|Y],K,L):-
  20.     del(Z,Y,T),
  21.     edge(X,Z),
  22.     chain_ham([Z|T],[X|K],L).
  23.  
  24. del(X,[X|Y],Y).
  25. del(X,[U|Y],[U|Z]):-
  26.     del(X,Y,Z).
  27.  
  28. edge(X,Y):-
  29.     connect(X,L),
  30.     el(Y,L).
  31.  
  32. el(X,[X|_]).
  33. el(X,[_|L]):-
  34.     el(X,L).
  35.  
  36. connect(a,[b,j,k]).
  37. connect(b,[a,c,p]).
  38. connect(c,[b,d,l]).
  39. connect(d,[c,e,q]).
  40. connect(e,[d,f,m]).
  41. connect(f,[e,g,r]).
  42. connect(g,[f,h,n]).
  43. connect(h,[i,g,s]).
  44. connect(i,[j,h,o]).
  45. connect(j,[a,i,t]).
  46. connect(k,[o,l,a]).
  47. connect(l,[k,m,c]).
  48. connect(m,[l,n,e]).
  49. connect(n,[m,o,g]).
  50. connect(o,[n,k,i]).
  51. connect(p,[b,q,t]).
  52. connect(q,[p,r,d]).
  53. connect(r,[q,s,f]).
  54. connect(s,[r,t,h]).
  55. connect(t,[p,s,j]).
  56.  
  57.  
  58.  
  59.