Using Daniel Lichtblau's answer to a related question
ConnectedComponents[Graph[UndirectedEdge @@@ pairs]] //Sort/@#& //Sort
gives
{{3, 5, 9},
{11, 21, 22, 35},
{12, 14, 16, 23},
{1, 6, 10, 13, 36},
{17, 20, 24, 25, 28, 32},
{2, 8, 15, 18, 27, 29, 31},
{4, 7, 19, 26, 30, 33, 34}}
EDIT: An alternative approach:Implementing transitive closure using MatrixPower
:
m = Max@pairs;
(*the adjacency matrix of atomic elements in pairs:*)
SparseArray[pairs ~Append~ {i_, i_} -> 1, {m, m}];
(*symmetrize the adjacency matrix:*)
% + %\[Transpose] // Sign;
(*find the transitive closure:*)
Sign @ MatrixPower[%, m];
(*eliminate duplicate rows,and extract the atomic elements of pairs in each row:*)
Join @@ Position[#, 1] & /@ DeleteDuplicates @ Normal @ %;
(*organize:*)
Sort[Sort /@ %]
Results:
{{3, 5, 9},
{11, 21, 22, 35},
{12, 14, 16, 23},
{1, 6, 10, 13, 36},
{17, 20, 24, 25, 28, 32},
{2, 8, 15, 18, 27, 29, 31},
{4, 7, 19, 26, 30, 33, 34}}