61 { hc(X,Y) : edge(X,Y) } 1 :- node(X). 71 { hc(Z,X) : edge(Z,X) } 1 :- node(X). 8reachable(X) :- node(X), hc(1,X). 9reachable(Y) :- node(X), node(Y), reachable(X), hc(X,Y). 10:- not reachable(X), node(X). 11 12 13edge(0, 1). 14edge(1, 2). 15edge(2, 3). 16edge(3, 0). 17 18edge(2, 0). 19edge(0, 3). 20edge(3, 1). 21 22node(0..3). 23 24 25distance(X,D) :- reachable(X), hc(1,X), dist(1,X,D). 26distance(Y,D) :- distance(X,D1), hc(X,Y), dist(X,Y,D2), D = D1 + D2. 27 28dist(0, 1, 1). 29dist(1, 2, 1). 30dist(2, 3, 1). 31dist(3, 0, 1). 32 33dist(2, 0, 1). 34dist(0, 3, 1). 35dist(3, 1, 1)