带权有向图找到全部的环
完整源码
#include <iostream>
#include <vector>
#include <tuple>
#include <stack>
#include <map>
using namespace std;
int V, E;
int n;
map<int, vector<tuple<int , int , double>>> EWD;
bool marked[100];
bool onStack[100];
tuple<int , int , double> edgeTo[100];
stack<tuple<int , int , double>> cycle[100];
void dfs(int v) {
onStack[v] = true;
marked[v] = true;
for(vector<tuple<int, int, double>>::iterator ii = EWD[v].begin(); ii != EWD[v].end(); ii++)
{
int w = get<1>(*ii);
if(!marked[w]) {
edgeTo[w] = *ii;
dfs(w);
}
else if(onStack[w]) {
tuple<int, int, double> f = *ii;
while(get<0>(f) != w) {
cycle[n].push(f);
f = edgeTo[get<0>(f)];
}
cycle[n].push(f);
n++;
return ;
}
}
onStack[v] = false;
}
void findCycle() {
for(int v =