Edge LabelingΒΆ
Warning
NOT TESTED
#include <cstdio>
#include <vector>
using namespace std;
#define MAX 100
enum States {UNVISITED, VISITED, EXPLORED};
/*
UNVISTED - not visited yet
VISTED - visited and all edges checked
EXPLORED - visited but with unchecked edges
*/
int parent_node[MAX];
States node_state[MAX];
vector<int> G[MAX];
void graphCheck(int node)
{
/*
Maps every edge on a graph
Useful for cycle detection
Complexity: O(E + V)
*/
node_state[node] = EXPLORED;
for(auto adjacent: G[node])
{
// Edge: EXPLORED -> UNVISTED
if(node_state[adjacent] == UNVISITED)
{
parent_node[adjacent] = node;
graphCheck(adjacent);
}
// Edge: EXPLORED -> EXPLORED
else if(node_state[adjacent] == EXPLORED)
{
if(adjacent == parent_node[node])
{
// Undirected / Two ways
}
else
{
// Back edge / Cycle
}
}
// Edge: EXPLORED -> VISITED
else if(node_state[adjacent] == VISITED)
{
// Foward Edge / Cycle / Cross Edge
}
}
node_state[node] = VISITED;
}