CmisSync.Lib.Algorithms.Tarjan.Run C# (CSharp) Method

Run() private method

private Run ( AbstractTarjanNode node ) : void
node AbstractTarjanNode
return void
        private void Run(AbstractTarjanNode node) {
            node.dfs = this.maxdfs;
            node.LowLink = this.maxdfs;
            this.maxdfs++;
            this.stack.Push(node);
            node.OnStack = true;
            this.nodes.Remove(node);
            foreach (var neighbor in node.Neighbors) {
                if (this.nodes.Contains(neighbor)) {
                    this.Run(neighbor);
                    node.LowLink = Math.Min(node.LowLink, neighbor.LowLink);
                } else if (neighbor.OnStack) {
                    node.LowLink = Math.Min(node.LowLink, neighbor.dfs);
                }
            }

            if (node.LowLink == node.dfs) {
                var s = new List<AbstractTarjanNode>();
                this.ResultSets.Add(s);
                AbstractTarjanNode n;
                do {
                    n = this.stack.Pop();
                    n.OnStack = false;
                    s.Add(n);
                } while (node != n);
            }
        }