fork download
  1. color(red).
  2. color(green).
  3. color(blue).
  4. color(yellow).
  5.  
  6. adjacent(鶴見, 神奈川).
  7. adjacent(神奈川, 西).
  8. adjacent(西,).
  9. adjacent(,).
  10. adjacent(, 港南).
  11. adjacent(港南, 磯子).
  12. adjacent(磯子, 金沢).
  13. adjacent(金沢,).
  14. adjacent(, 港南).
  15. adjacent(, 保土ケ谷).
  16. adjacent(保土ケ谷, 西).
  17. adjacent(保土ケ谷,).
  18. adjacent(, 瀬谷).
  19. adjacent(瀬谷,).
  20. adjacent(, 戸塚).
  21. adjacent(戸塚,).
  22. adjacent(都筑, 港北).
  23. adjacent(都筑, 青葉).
  24. adjacent(都筑,).
  25. adjacent(港北, 神奈川).
  26. adjacent(, 青葉).
  27. adjacent(港北, 鶴見).
  28. adjacent(保土ケ谷,).
  29.  
  30. % 隣接しているか(双方向対応)
  31. adjacent_undirected(X,Y) :- adjacent(X,Y).
  32. adjacent_undirected(X,Y) :- adjacent(Y,X).
  33.  
  34. % 色が隣接区と違うことをチェック
  35. safe_color(_, _, []).
  36. safe_color(,, [H-色H | T]) :-
  37. (adjacent_undirected(, H) -> 色 \= 色H ; true),
  38. safe_color(,, T).
  39.  
  40. % 順番に色割り当て、割り当て済みと矛盾がないか確認
  41. assign_colors([], 割当済み, 割当済み).
  42. assign_colors([| 残り], 割当済み0, 割当済み) :-
  43. color(),
  44. safe_color(,, 割当済み0),
  45. assign_colors(残り, [-| 割当済み0], 割当済み).
  46.  
  47. % 結果の色リストを表示
  48. print_colors([]).
  49. print_colors([-| 残り]) :-
  50. write(), write(' -> '), write(), nl,
  51. print_colors(残り).
  52.  
  53. % 実行開始
  54. run :-
  55. 順番 = [鶴見, 神奈川, 西,,, 港南,
  56. 磯子, 金沢,, 保土ケ谷,, 瀬谷,
  57. , 戸塚, 都筑, 港北,, 青葉],
  58. assign_colors(順番, [], 割当済み),
  59. write('4色で塗り分け可能'), nl,
  60. reverse(割当済み, 色リスト),
  61. print_colors(色リスト).
  62.  
  63.  
Success #stdin #stdout #stderr 0.03s 6960KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
Warning: /home/N1Q1so/prog:63: Initialization goal failed
ERROR: '$runtoplevel'/0: Undefined procedure: program/0
   Exception: (3) program ? EOF: exit