Пример #1
0
 public TransitiveClosure(Digraph g)
 {
     all = new DirectedDfs[g.Vcount];
     for (int i = 0; i < g.Vcount; i++)
     {
         all[i] = new DirectedDfs(g, i);
     }
 }
Пример #2
0
        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));
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
        }