In response to a query on Stack Overflow on March 10 2019 by Ankit, the 
following  function, FindCycles, was given:

## More efficient version
FindCycles = function(g) {
  Cycles = NULL
  for(v1 in V(g)) {
    if(degree(g, v1, mode="in") == 0) { next }
    GoodNeighbors = neighbors(g, v1, mode="out")
    GoodNeighbors = GoodNeighbors[GoodNeighbors > v1]
    for(v2 in GoodNeighbors) {
      TempCyc = lapply(all_simple_paths(g, v2,v1, mode="out"), function(p) 
c(v1,p))
      TempCyc = TempCyc[which(sapply(TempCyc, length) > 3)]                     
            ###
      TempCyc = TempCyc[sapply(TempCyc, min) == sapply(TempCyc, `[`, 1)]
      Cycles  = c(Cycles, TempCyc)                   }
  }
  Cycles
}

I am interested in finding cycles of any length, so that the line marked ### 
should be removed.

The resultant code works for cycles of size at least two, but does not catch 
singleton cycles.
Is there a simple fix?

(I wrote an obvious modification of the code above to search for just singleton 
cycles, but it seems that there must be a simple tweak to the code above.)

Many thanks,

Simon

_______________________________________________
igraph-help mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/igraph-help

Reply via email to