Решение задачи о подсчете числа компонент связности.

Идея. Запустим метод волны (или обход в ширину) из некоторой вершины. Он посчитает расстояния до всех вершин компоненты связности, при этом у вершин из других компонент связности останутся -1. Найдем вершину, в которой осталась -1 и запустим метод волны из нее (при этом не заполняя массив B значением -1). Теперь -1 остались только в тех вершинах, которые не лежат в первых двух нами найденных компонентах связности. И так далее. Сколько раз мы запускали метод волны - столько у нас компонент связности.

Алгоритм решения задачи (пусть A - матрица смежности, B - массив расстояний до соответствующей вершины, использующийся в методе волны, D - переменная, использующаяся для подсчета числа компонент связности):

D:=0;
Заполняем массив B значением -1.
Пробегаем все вершины (Z - текущая вершина)
  Если B[Z] = -1 тогда 
                       D:=D+1 (найдена еще одна компонента связности), 
                       B[Z]:=0;
                       запускаем метод волны, который найдет расстояния
                       до всех вершин, до которых сможет дойти от вершины Z
                       
D - ответ задачи

Для работы вам нужна матрица смежности, а дан список ребер. Естественно, нужно считать этот список ребер, а в памяти построить матрицу смежности. Не забудьте, что, например, ребро 2 3 - это ребро как из 2 в 3, так и из 3 в 2.

Что делать с кратными ребрами и петлями? Мысль: нам все равно, есть петля или нет, есть ли между какими-то вершинами несколько ребер или одно.