mirror of
https://github.com/opencv/opencv_contrib.git
synced 2025-10-15 20:37:07 +08:00
Merge pull request #3207 from aimbot6120:swtfix
replaced recursion DFS to stack DFS
This commit is contained in:
@@ -7,6 +7,7 @@
|
||||
|
||||
#include <unordered_map>
|
||||
#include <limits>
|
||||
#include <stack>
|
||||
|
||||
using namespace std;
|
||||
|
||||
@@ -91,15 +92,25 @@ void addEdge(std::vector< std::vector<int> >& adj, int u, int v)
|
||||
static
|
||||
void DFSUtil(int v, std::vector<bool> & visited, std::vector< std::vector<int> >& adj, int label, std::vector<int> &component_id)
|
||||
{
|
||||
// Mark the current node as visited and label it as belonging to the current component
|
||||
visited[v] = true;
|
||||
component_id[v] = label;
|
||||
// Recur for all the vertices
|
||||
// adjacent to this vertex
|
||||
for (size_t i = 0; i < adj[v].size(); i++) {
|
||||
int neighbour = adj[v][i];
|
||||
if (!visited[neighbour]) {
|
||||
DFSUtil(neighbour, visited, adj, label, component_id);
|
||||
stack<int> s;
|
||||
s.push(v);
|
||||
while(!s.empty()){
|
||||
v = s.top();
|
||||
s.pop();
|
||||
if(!visited[v])
|
||||
{
|
||||
// Mark the current node as visited and label it as belonging to the current component
|
||||
visited[v] = true;
|
||||
component_id[v] = label;
|
||||
// Recur for all the vertices
|
||||
// adjacent to this vertex
|
||||
for (size_t i = 0; i < adj[v].size(); i++) {
|
||||
int neighbour = adj[v][i];
|
||||
if(!visited[neighbour])
|
||||
{
|
||||
s.push(neighbour);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user