VTK/Examples/Cxx/Graphs/ConnectedComponents

From KitwarePublic

Jump to: navigation, search

This example constructs a graph with 4 vertices and 2 edges. V1 and V2 are not connected to V3 or V4. We wish to obtain all of the connected components of the graph. The output of the example is a list of component IDs. All vertices with the same ID can be reached from any vertex with the same ID.

ConnectedComponents.cxx

#include <vtkSmartPointer.h>
 
#include <vtkBoostConnectedComponents.h>
#include <vtkDataArray.h>
#include <vtkDataSetAttributes.h>
#include <vtkGraph.h>
#include <vtkIntArray.h>
#include <vtkMutableUndirectedGraph.h>
 
int main ( int, char *[] )
{
  vtkSmartPointer<vtkMutableUndirectedGraph> g = 
    vtkSmartPointer<vtkMutableUndirectedGraph>::New();
 
  vtkIdType v1 = g->AddVertex();
  vtkIdType v2 = g->AddVertex();
  vtkIdType v3 = g->AddVertex();
  vtkIdType v4 = g->AddVertex();
 
  g->AddEdge ( v1, v2 );
  g->AddEdge ( v3, v4 );
 
  vtkSmartPointer<vtkBoostConnectedComponents> connectedComponents = 
    vtkSmartPointer<vtkBoostConnectedComponents>::New();
  connectedComponents->SetInput(g);
  connectedComponents->Update();
 
  vtkGraph* outputGraph = connectedComponents->GetOutput();
 
  vtkIntArray* components = vtkIntArray::SafeDownCast(
    outputGraph->GetVertexData()->GetArray("component"));
 
  for(vtkIdType i = 0; i < components->GetNumberOfTuples(); i++)
    {
    int val = components->GetValue(i);
    std::cout << val << std::endl;
    }
 
  return EXIT_SUCCESS;
}

CMakeLists.txt

cmake_minimum_required(VERSION 2.6)
 
PROJECT(ConnectedComponents)
 
FIND_PACKAGE(VTK REQUIRED)
INCLUDE(${VTK_USE_FILE})
 
ADD_EXECUTABLE(ConnectedComponents ConnectedComponents.cxx)
TARGET_LINK_LIBRARIES(ConnectedComponents vtkHybrid vtkInfovis)
Personal tools