PolyDiM
C++ library for POLYtopal DIscretization Methods
Loading...
Searching...
No Matches
GraphUtilities.hpp
Go to the documentation of this file.
1// _LICENSE_HEADER_
2//
3// Copyright (C) 2019 - 2025.
4// Terms register on the GPL-3.0 license.
5//
6// This file can be redistributed and/or modified under the license terms.
7//
8// See top level LICENSE file for more details.
9//
10// This file can be used citing references in CITATION.cff file.
11
12#ifndef __GraphUtilities_H
13#define __GraphUtilities_H
14
15#include "Eigen/Eigen"
16#include <iostream>
17#include <list>
18#include <stack>
19#include <unordered_map>
20#include <vector>
21
22namespace Gedim
23{
25{
26 public:
28 {
29 std::vector<std::vector<unsigned int>> GraphAdjacencyVertices;
30 std::vector<std::unordered_map<unsigned int, unsigned int>> GraphAdjacencyVerticesMap;
31 std::vector<std::vector<unsigned int>> GraphAdjacencyEdges;
32 std::vector<std::unordered_map<unsigned int, unsigned int>> GraphAdjacencyEdgesMap;
33 };
34
35 private:
39 void FillOrder(const unsigned int &v,
40 const std::vector<std::vector<unsigned int>> &graphAdjacency,
41 std::vector<bool> &visited,
42 std::stack<int> &stack) const;
43
44 public:
47
51 std::vector<std::vector<unsigned int>> ExtractSubGraph(const std::vector<std::vector<unsigned int>> &graphAdjacency,
52 const std::unordered_map<unsigned int, unsigned int> &subGraphFilter) const;
53
54 GraphAdjacencyData GraphConnectivityToGraphAdjacency(const unsigned int &graphNumVertices,
55 const Eigen::MatrixXi &graphConnectivity,
56 const bool &directEdges = true) const;
57
58 Eigen::MatrixXi GraphAdjacencyToGraphConnectivity(const unsigned int &graphNumEdges,
59 const std::vector<std::vector<unsigned int>> &graphAdjacency) const;
60
65 std::vector<std::vector<unsigned int>> ComputeStronglyConnectedComponents(const std::vector<std::vector<unsigned int>> &graphAdjacency) const;
66
68 void DepthFirstSearch(const unsigned int &vertex,
69 const std::vector<std::vector<unsigned int>> &graphAdjacency,
70 std::vector<bool> &visited,
71 std::list<unsigned int> &visitedVertices) const;
72
74 std::vector<unsigned int> BreadthFirstSearch(const unsigned int &vertex,
75 const std::vector<std::vector<unsigned int>> &graphAdjacency) const;
76
78 std::vector<std::vector<unsigned int>> ComputeAdjacencyTranspose(const std::vector<std::vector<unsigned int>> &graphAdjacency) const;
79};
80
81} // namespace Gedim
82
83#endif // __GraphUtilities_H
Eigen column vector.
Definition Eigen_Array.hpp:23
Definition GraphUtilities.hpp:25
void DepthFirstSearch(const unsigned int &vertex, const std::vector< std::vector< unsigned int > > &graphAdjacency, std::vector< bool > &visited, std::list< unsigned int > &visitedVertices) const
A recursive function to DFS starting from v.
Definition GraphUtilities.cpp:18
std::vector< std::vector< unsigned int > > ExtractSubGraph(const std::vector< std::vector< unsigned int > > &graphAdjacency, const std::unordered_map< unsigned int, unsigned int > &subGraphFilter) const
Definition GraphUtilities.cpp:106
Eigen::MatrixXi GraphAdjacencyToGraphConnectivity(const unsigned int &graphNumEdges, const std::vector< std::vector< unsigned int > > &graphAdjacency) const
Definition GraphUtilities.cpp:184
std::vector< std::vector< unsigned int > > ComputeAdjacencyTranspose(const std::vector< std::vector< unsigned int > > &graphAdjacency) const
Definition GraphUtilities.cpp:67
std::vector< std::vector< unsigned int > > ComputeStronglyConnectedComponents(const std::vector< std::vector< unsigned int > > &graphAdjacency) const
Compute the Strongly Connected Components of a direct graph.
Definition GraphUtilities.cpp:200
std::vector< unsigned int > BreadthFirstSearch(const unsigned int &vertex, const std::vector< std::vector< unsigned int > > &graphAdjacency) const
A function to BFS starting from v.
Definition GraphUtilities.cpp:37
GraphUtilities()
Definition GraphUtilities.hpp:45
~GraphUtilities()
Definition GraphUtilities.hpp:46
GraphAdjacencyData GraphConnectivityToGraphAdjacency(const unsigned int &graphNumVertices, const Eigen::MatrixXi &graphConnectivity, const bool &directEdges=true) const
Definition GraphUtilities.cpp:135
Definition Eigen_Array.cpp:22
Definition GraphUtilities.hpp:28
std::vector< std::unordered_map< unsigned int, unsigned int > > GraphAdjacencyEdgesMap
Definition GraphUtilities.hpp:32
std::vector< std::vector< unsigned int > > GraphAdjacencyVertices
Definition GraphUtilities.hpp:29
std::vector< std::unordered_map< unsigned int, unsigned int > > GraphAdjacencyVerticesMap
Definition GraphUtilities.hpp:30
std::vector< std::vector< unsigned int > > GraphAdjacencyEdges
Definition GraphUtilities.hpp:31