public IActionResult Index(DynamicConnectivityModel model)
        {
            if (ModelState.IsValid && model.elementsCount > 0)
            {
                QuickFind quickFind = new QuickFind(model.elementsCount);

                if (model.unions != null)
                {
                    string[] pairStrings = model.unions.Split("\r\n");
                    string[] pair        = new string[2];

                    for (int i = 0; i < pairStrings.Length; i++)
                    {
                        pair = pairStrings[i].Split(" ");
                        int.TryParse(pair[0], out int a);
                        int.TryParse(pair[1], out int b);
                        quickFind.Union(a, b);
                    }
                }

                model.collection = quickFind.array;
            }
            else
            {
                model.elementsCount = 10;
            }

            return(View(model));
        }
예제 #2
0
        public KruskalMst(EdgeWeightedGraph graph)
        {
            _mst = new Queue <Edge>();

            var edges = graph.Edges();

            Array.Sort(edges, (edge, edge1) => edge.CompareTo(edge1));

            var vertices = graph.Vertices();
            var uf       = new QuickFind(vertices.Length);

            var count = 0;

            while (count < edges.Length && _mst.Count < vertices.Length - 1)
            {
                var edge = edges[count];

                var v = edge.Either();
                var w = edge.Other(v);

                if (!uf.Connected(v, w))
                {
                    uf.Union(v, w);
                    _mst.Enqueue(edge);
                }

                count++;
            }
        }
예제 #3
0
        public void IsConnected_NodesAreNotConnected_ReturnsFalse()
        {
            QuickFind quickFind = new QuickFind(5);

            quickFind.Union(1, 2);

            Assert.IsFalse(quickFind.IsConnected(2, 3));
        }
예제 #4
0
        public void IsConnected_NodesAreConnected_ReturnsTrue()
        {
            QuickFind quickFind = new QuickFind(5);

            quickFind.Union(1, 2);

            Assert.IsTrue(quickFind.IsConnected(1, 2));
        }
예제 #5
0
        public void IsConnected_MultipleUnions_ReturnsTrue()
        {
            QuickFind quickFind = new QuickFind(5);

            quickFind.Union(1, 2);
            quickFind.Union(2, 3);

            Assert.IsTrue(quickFind.IsConnected(1, 3));
        }
예제 #6
0
        public void DemoTest()
        {
            IUnionFind uf = new QuickFind(10);

            uf.Union(4, 3);
            int[] ids = uf.GetIds();
            Assert.AreEqual(3, ids[3]);
            Assert.AreEqual(3, ids[4]);

            uf.Union(3, 8);
            ids = uf.GetIds();
            Assert.AreEqual(8, ids[3]);
            Assert.AreEqual(8, ids[4]);

            uf.Union(6, 5);
            ids = uf.GetIds();
            Assert.AreEqual(5, ids[5]);
            Assert.AreEqual(5, ids[6]);

            uf.Union(9, 4);
            ids = uf.GetIds();
            Assert.AreEqual(8, ids[4]);
            Assert.AreEqual(8, ids[9]);

            uf.Union(2, 1);
            ids = uf.GetIds();
            Assert.AreEqual(1, ids[1]);
            Assert.AreEqual(1, ids[2]);

            Assert.IsTrue(uf.Connected(8, 9));
            Assert.IsFalse(uf.Connected(5, 0));

            uf.Union(5, 0);
            ids = uf.GetIds();
            Assert.AreEqual(0, ids[0]);
            Assert.AreEqual(0, ids[5]);
            Assert.AreEqual(0, ids[6]);

            uf.Union(7, 2);
            ids = uf.GetIds();
            Assert.AreEqual(1, ids[1]);
            Assert.AreEqual(1, ids[2]);
            Assert.AreEqual(1, ids[7]);

            uf.Union(6, 1);
            ids = uf.GetIds();
            Assert.AreEqual(1, ids[0]);
            Assert.AreEqual(1, ids[1]);
            Assert.AreEqual(1, ids[2]);
            Assert.AreEqual(8, ids[3]);
            Assert.AreEqual(8, ids[4]);
            Assert.AreEqual(1, ids[5]);
            Assert.AreEqual(1, ids[6]);
            Assert.AreEqual(1, ids[7]);
            Assert.AreEqual(8, ids[8]);
            Assert.AreEqual(8, ids[9]);
        }
예제 #7
0
        public void IsConnected_UnionOfConnectedNodes_ReturnsTrue()
        {
            QuickFind quickFind = new QuickFind(5);

            quickFind.Union(1, 2);
            quickFind.Union(4, 5);
            quickFind.Union(1, 4);

            Assert.IsTrue(quickFind.IsConnected(2, 4));
        }
예제 #8
0
        public void InitWorks()
        {
            IUnionFind uf = new QuickFind(10);

            int[] ids = uf.GetIds();
            for (int i = 0; i < 10; i++)
            {
                Assert.AreEqual(i, ids[i]);
            }
        }
예제 #9
0
        public void QuickFindTest()
        {
            var pqPairs = CreatePairs();

            var qf = new QuickFind(10);

            int[] arr = qf.DoSearch(pqPairs);

            //all items are now connected - all indexes are 1
            Assert.IsFalse(arr.Any(i => i != 1));
        }
            public override object Clone()
            {
                var obj = new QuickFind(
                    FindWhat,
                    LookIn,
                    MatchCase,
                    MatchWholeWord,
                    SearchUp,
                    SearchType);

                return(obj);
            }
예제 #11
0
        public void QuickFind_TinyFile_True()
        {
            var dots      = new Dots(@"DataStore\tinyUF.txt");
            var quickFind = new QuickFind(dots.Count);

            foreach (Tuple <int, int> item in dots.Items)
            {
                if (quickFind.Connected(item.Item1, item.Item2))
                {
                    continue;
                }
                quickFind.Union(item.Item1, item.Item2);
            }
            Assert.Equal(2, quickFind.Count);
        }
        public void TestingUFQuickFind()
        {
            var unionFind = new QuickFind(10);

            unionFind.Union(4, 3);
            unionFind.Union(3, 8);
            unionFind.Union(6, 5);
            unionFind.Union(9, 4);
            unionFind.Union(2, 1);
            unionFind.Union(8, 9);
            unionFind.Union(5, 0);
            unionFind.Union(7, 2);
            unionFind.Union(6, 1);
            unionFind.Union(1, 0);
            unionFind.Union(6, 7);
        }
예제 #13
0
        public void test_union_find()
        {
            var uf = new QuickFind(10);

            uf.Union(1, 3);
            uf.Union(2, 3);
            uf.Union(5, 6);
            uf.Union(4, 5);

            Assert.True(uf.IsConnected(1, 3));
            Assert.True(uf.IsConnected(2, 3));
            Assert.True(uf.IsConnected(1, 2));
            Assert.True(uf.IsConnected(4, 5));
            Assert.True(uf.IsConnected(4, 6));
            Assert.False(uf.IsConnected(1, 6));
            Assert.False(uf.IsConnected(3, 4));

            this.logger.WriteLine("Connected: {1, 2, 3}");
        }
예제 #14
0
    public void TestQuickFind()
    {
        var input = new List <int[]>()
        {
            new int[] { 1, 3 },
            new int[] { 1, 4 },
            new int[] { 8, 9 }
        };

        var N = 10;


        var uf = new QuickFind(N);

        foreach (var item in input)
        {
            uf.Union(item[0], item[1]);
        }

        Assert.Equal(uf.Connected(3, 4), true);
        Assert.Equal(uf.Connected(9, 0), false);
    }
예제 #15
0
        public ScriptEditView(PluginMain main, bool highlight = false)
        {
            InitializeComponent();

            InitializeAutoComplete();

            Icon = Icon.FromHandle(Resources.ScriptIcon.GetHicon());

            _main      = main;
            _quickFind = new QuickFind(this, _codeBox);

            _codeBox.BorderStyle = BorderStyle.None;
            _codeBox.Dock        = DockStyle.Fill;
            _codeBox.Styles[Style.Default].Font      = StyleManager.Style.FixedFont.Name;
            _codeBox.Styles[Style.Default].SizeF     = StyleManager.Style.FixedFont.Size;
            _codeBox.Styles[Style.Default].ForeColor = StyleManager.Style.TextColor;
            _codeBox.Styles[Style.Default].BackColor = StyleManager.Style.BackColor;
            _codeBox.StyleClearAll();
            _codeBox.CharAdded        += codeBox_CharAdded;
            _codeBox.InsertCheck      += codeBox_InsertCheck;
            _codeBox.KeyDown          += codebox_KeyDown;
            _codeBox.MarginClick      += codeBox_MarginClick;
            _codeBox.SavePointLeft    += codeBox_SavePointLeft;
            _codeBox.SavePointReached += codeBox_SavePointReached;
            _codeBox.TextChanged      += codeBox_TextChanged;
            _codeBox.UpdateUI         += codeBox_UpdateUI;
            Controls.Add(_codeBox);

            InitializeMargins();
            if (highlight)
            {
                _codeBox.Lexer = Lexer.Cpp;
                InitializeHighlighting("");
                InitializeFolding();
            }

            StyleManager.AutoStyle(this);
        }
예제 #16
0
        public void QuickFind_ReflexiveCheck()
        {
            var quickFind = new QuickFind(10);

            ReflexiveCheck(quickFind);
        }
예제 #17
0
            public override object Clone()
            {
                var obj = new QuickFind(
                    FindWhat,
                    LookIn,
                    MatchCase,
                    MatchWholeWord,
                    SearchUp,
                    SearchType);

                return obj;
            }
예제 #18
0
 public void SetUp()
 {
     _quickFind = new QuickFind(10);
 }
예제 #19
0
        public void QuickFind_SymmetricCheck()
        {
            var quickFind = new QuickFind(10);

            SymmetricCheck(quickFind);
        }
예제 #20
0
        public void QuickFind_TwoSites()
        {
            var quickFind = new QuickFind(10);

            TwoSitesCheck(quickFind);
        }
 public QuickFindTests()
 {
     _unionFind = new QuickFind(_numberOfElements);
 }
예제 #22
0
 public QuickFindItem(QuickFind parent, string fullpath)
 {
     m_parent   = parent;
     m_fullpath = fullpath;
 }
예제 #23
0
        public void TestQuickFind()
        {
            UnionFind unionFind = new QuickFind(count);

            this.TestUnionFind(unionFind);
        }
예제 #24
0
        public void QuickFind_TransitiveCheck()
        {
            var quickFind = new QuickFind(10);

            TransitiveCheck(quickFind);
        }
예제 #25
0
 public QuickFindTest()
 {
     _quickFind = new QuickFind(10);
     Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("en-US");
 }
예제 #26
0
        public void QuickFind_AllConnected()
        {
            var quickFind = new QuickFind(10);

            AllConnectedCheck(quickFind);
        }
예제 #27
0
        public void QuickFindTest()
        {
            var dc = new QuickFind(10);

            DynamicConnectivityTestRuner.RunTests(dc);
        }