public TransitiveClosure(Digraph g) { all = new DirectedDfs[g.Vcount]; for (int i = 0; i < g.Vcount; i++) { all[i] = new DirectedDfs(g, i); } }
void DigraphDfsTest() { var g = DigraphSample(); var dfs = new DirectedDfs(g, 0); Assert.True(dfs.Marked(1)); Assert.True(dfs.Marked(2)); Assert.False(dfs.Marked(6)); }
public bool Recognizes(string txt) { ConcurrentBag <int> pc = new ConcurrentBag <int>(); DirectedDfs dfs = new DirectedDfs(g, 0); for (int i = 0; i < g.VertexSize; i++) { if (dfs.Marked(i)) { pc.Add(i); } } for (int i = 0; i < txt.Length; i++) { ConcurrentBag <int> match = new ConcurrentBag <int>(); foreach (var v in pc) { if (v < m) { if (re[v] == txt[i] || re[v] == '.') { match.Add(v + 1); } } } pc = new ConcurrentBag <int>(); dfs = new DirectedDfs(g, match); for (int v = 0; v < g.VertexSize; v++) { if (dfs.Marked(v)) { pc.Add(v); } } } foreach (var v in pc) { if (v == m) { return(true); } } return(false); }
public bool Recognizes(string txt) { var pc = new List <int>(); var dfs = new DirectedDfs(g, 0); for (int v = 0; v < g.Vcount; v++) { if (dfs.Marked(v)) { // here should filter metachar out pc.Add(v); } } for (int i = 0; i < txt.Length; i++) { var match = new List <int>(); foreach (int v in pc) { if (v < M) { if (re[v] == txt[i] || re[v] == '.') { match.Add(v + 1); } } } pc = new List <int>(); dfs = new DirectedDfs(g, match); for (int v = 0; v < g.Vcount; v++) { if (dfs.Marked(v)) { // here should filter metachar out pc.Add(v); } } } foreach (int v in pc) { if (v == M) { return(true); } } return(false); }