/** Base DFS algorithm returns "Yes" or "No". */
program

	name dfs_yes_no;
	author "Some clever book :o)";
	version 1.0;


define

	DFSNode extends Node
	attributes
		string name;
		boolean visited;
	;

	DFSEdge extends Edge (DFSNode);

	DFSGraph extends Graph (DFSEdge);


var

	DFSGraph graph;
	DFSNodes start, finish;


function dfs_search (DFSNodes nodes) returns boolean;
var
	DFSNodes friends;
	DFSNodes friendOne;
do
	if nodes get_intersection_fake(finish) >= 1 then
	    return true;

	friends := graph get_edges() get_edges_source_is(nodes) get_nodes_destination() get_visited_is(false);
	for each friendOne from friends
	do
	    friendOne set_visited(true);
		if dfs_search(friendOne) then
	        return true;
	enddo

	return false;
enddo

procedure main();
do
	writeln(get_error_text(graph load_from_file("D:\\Projects\\Rocnikovy projekt\\070419\\graphs\\BGSGraph3.dat")));
	start := graph get_nodes() get_name_is("start");
	finish := graph get_nodes() get_name_is("end");
	if start get_size() != 1 | finish get_size() != 1 then
	    terminate("Chybne urceni zacatku nebo cile hledani!");

	if dfs_search(start) then
	    terminate("Existuje alespon jedna cesta ze startu do cile.");

	terminate("Nebyla nalezana zadna cesta mezi zvolenymi vrcholy!");
enddo