program

	name components;
	description "Zjisti z kolika komponent se zadany graf sklada";


define

	KNode extends Node
	attributes
		int group;
	;

	KEdge extends Edge (KNode);

	KGraph extends Graph (KEdge);


var

	KGraph graph;
	KNodes node, nodes;
	KNodes source, destination;
	KEdges edge, edges;
	int i;


procedure main();
do
    writeln(get_error_text(graph load_from_file("D:\\Projects\\Rocnikovy projekt\\070420\\graphs\\Komponenty1.dat")));

	nodes := graph get_nodes();
	i := 0;
	for each node from nodes
	do
	    i := i + 1;
		node set_group(i);
	enddo

	// kazde skupine prideli specificke cislo, které mají všechny prvky komponenty
	edges := graph get_edges();
	for each edge from edges
	do
		source := edge get_nodes_source();
		destination := edge get_nodes_destination();
		if source get_group_value() != destination get_group_value() then
		do
			source := nodes get_group_equal(source get_group_value());
			destination := nodes get_group_equal(destination get_group_value());
			if source get_size() < destination get_size() then
				source set_group(destination get_group_value());
			else
				destination set_group(source get_group_value());
			i := i - 1;
		enddo
	enddo

	terminate("Zadany graf se sklada ze " + int_to_string(i) + " komponent.");
enddo