Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- % This buffer is for notes you don't want to save.
- % If you want to create a file, visit that file with C-x C-f,
- % then enter the text in that file's own buffer.
- :- dynamic(node/1).
- :- dynamic(edge/3).
- printMenu :-
- writef('\nMENU\n'),
- writef('1. Add node\n'),
- writef('2. Delete node\n'),
- writef('3. Add edge\n'),
- writef('4. Delete edge\n'),
- writef('5. Show graph\n'),
- writef('6. Show cost\n'),
- writef('0. Exit\n'),
- writef('Select your option\n').
- addNode(X) :- node(X),
- writef('Node %d already exists\n', [X]).
- addNode(X) :- assert(node(X)).
- deleteNode(X) :- not(node(X)),
- writef('Node %d does not exist\n', [X]).
- deleteNode(X) :- node(X),
- retractall(edge(X,_,_)),
- retractall(edge(_,X,_)),
- retract(node(X)).
- addEdge(X,Y,_) :- not(node(X)) ; not(node(Y)),
- writef('Node %d or %d does not exist\n',[X, Y]).
- addEdge(_,_,Z) :- Z < 1,
- writef('Edge distance cannot be 0 or negative\n').
- addEdge(X,Y,_) :- edge(X, Y, _),
- writef('Edge already exists from %d to %d\n', [X, Y]).
- addEdge(X,Y,Z) :- assert(edge(X,Y,Z)).
- deleteEdge(X,Y) :- not(edge(X,Y,_)),
- writef('Edge from %d to %d does not exist\n', [X, Y]).
- deleteEdge(X,Y) :-
- retract(edge(X,Y,_)).
- showGraph :-
- findall(N,node(N),R1),
- writef('Nodes %s\n', [R1]),
- findall([X,Y,C],edge(X,Y,C), R2),
- write('Edges '), write(R2), writef('\n').
- path(X,Y,-1000) :- not(edge(X,Y,_)).
- path(X,Y,C) :- edge(X,Y,C).
- path(X,Y,C) :- edge(X,A,C1),
- path(A,Y,C2),
- C is C1 + C2.
- showCost(X,Y) :- not(node(X)) ; not(node(Y)),
- writef('Node %d or %d does not exist\n', [X,Y]).
- showCost(X,Y) :- path(X,Y,C),
- C < 1,
- writef('Path from %d to %d does not exist\n', [X,Y]).
- showCost(X,Y) :- path(X,Y,C),
- writef('Cost from %d to %d is %d', [X,Y,C]).
- selected(0).
- selected(1) :-
- writef('Adding node\n'),
- read(X),
- addNode(X),
- graphExe.
- selected(2) :-
- writef('Deleting node\n'),
- read(X),
- deleteNode(X),
- graphExe.
- selected(3) :-
- writef('Adding edge\n Insert X, Y and C\n'),
- read(X),
- read(Y),
- read(Z),
- addEdge(X,Y,Z),
- graphExe.
- selected(4) :-
- writef('Deleting edge\n Insert X and Y\n'),
- read(X),
- read(Y),
- deleteEdge(X,Y),
- graphExe.
- selected(5) :-
- writef('Show graph\n'),
- showGraph,
- graphExe.
- selected(6) :-
- writef('Show cost\n'),
- read(X),
- read(Y),
- showCost(X,Y).
- selected(X) :-
- writef('Option %d not found!\n',X),
- graphExe.
- graphExe :-
- printMenu,
- read(X),
- selected(X).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement