public void Connect(int firstIndex, int secondIndex)
{
// if nodes are already in one group
if ((Elements[firstIndex].TaxonNumber == Elements[secondIndex].TaxonNumber) && (Elements[firstIndex].TaxonNumber != 0))
{
return;
}
// if both nodes doesn't belong to any group
if ((Elements[firstIndex].TaxonNumber == 0) && (Elements[secondIndex].TaxonNumber == 0))
{
// creating new group
Elements[firstIndex].TaxonNumber = GetNextTaxonNumber();
Elements[secondIndex].TaxonNumber = Elements[firstIndex].TaxonNumber;
Connections[SearchConnection(firstIndex, secondIndex)].Connected = true;
}
else if (Elements[firstIndex].TaxonNumber == 0)
{
// if only first element doesn't belong to any group connecting it to the existing group
Elements[firstIndex].TaxonNumber = Elements[secondIndex].TaxonNumber;
Connections[SearchConnection(firstIndex, secondIndex)].Connected = true;
}
else if (Elements[secondIndex].TaxonNumber == 0)
{
// if only second element doesn't belong to any group connecting it to the existing group
Elements[secondIndex].TaxonNumber = Elements[firstIndex].TaxonNumber;
Connections[SearchConnection(firstIndex, secondIndex)].Connected = true;
}
else if (Elements[firstIndex].TaxonNumber > Elements[secondIndex].TaxonNumber)
{
// if group of first element has bigger number then we renumber it
Renumber(firstIndex, Elements[secondIndex].TaxonNumber);
Connections[SearchConnection(firstIndex, secondIndex)].Connected = true;
}
else if (Elements[secondIndex].TaxonNumber > Elements[firstIndex].TaxonNumber)
{
// if group of second element has bigger number then we renumber it
Renumber(secondIndex, Elements[firstIndex].TaxonNumber);
Connections[SearchConnection(firstIndex, secondIndex)].Connected = true;
}
}