Esempio n. 1
0
        //głębokie drzewo
        private (Graph, Graph) Test05()
        {
            Graph t = new AdjacencyListsGraph <AVLAdjacencyList>(false, 16);

            t.AddEdge(0, 3);
            t.AddEdge(3, 5);
            t.AddEdge(5, 1);
            t.AddEdge(1, 6);
            t.AddEdge(6, 11);
            t.AddEdge(0, 7);
            t.AddEdge(7, 10);
            t.AddEdge(10, 15);
            t.AddEdge(10, 4);
            t.AddEdge(4, 8);
            t.AddEdge(0, 12);
            t.AddEdge(12, 13);
            t.AddEdge(13, 2);
            t.AddEdge(2, 9);
            t.AddEdge(9, 14);
            Graph g = t.Clone();

            g.AddEdge(3, 12);
            g.AddEdge(5, 7);
            g.AddEdge(10, 13);
            g.AddEdge(4, 13);
            g.AddEdge(1, 4);
            g.AddEdge(4, 2);
            return(g, t);
        }
Esempio n. 2
0
        //drzewo
        private (Graph g, Graph t) Test03()
        {
            Graph t = new AdjacencyListsGraph <SimpleAdjacencyList>(false, 10);

            t.AddEdge(0, 1);
            t.AddEdge(0, 2);
            t.AddEdge(0, 8);
            t.AddEdge(1, 9);
            t.AddEdge(1, 3);
            t.AddEdge(2, 4);
            t.AddEdge(2, 6);
            t.AddEdge(6, 7);
            t.AddEdge(4, 5);
            return(t.Clone(), t);
        }
Esempio n. 3
0
        public override void VerifyTestCase(out Result resultCode, out string message, object settings)
        {
            if (cycles == null)
            {
                message    = "Nie zwrócono wyniku";
                resultCode = Result.BadResult;
                return;
            }
            if (!AreEqual(g1, g) || !AreEqual(t1, t))
            {
                message    = "Zmodyfikowano grafy";
                resultCode = Result.BadResult;
                return;
            }
            Graph tLookup = new AdjacencyListsGraph <HashTableAdjacencyList>(t);
            Graph gLookup = new AdjacencyListsGraph <HashTableAdjacencyList>(g);
            var   test    = gLookup.Clone();

            foreach (var e in tLookup.GetEdges())
            {
                test.DelEdge(e);
            }
            foreach (var cycle in cycles)
            {
                bool   notInTree = false;
                bool[] vertices  = new bool[g.VerticesCount];
                if (!cycleChecker.Check(cycle, out message))
                {
                    resultCode = Result.BadResult;
                    return;
                }
                foreach (var e in cycle)
                {
                    if (!tLookup.ContainsEdge(e))
                    {
                        if (notInTree)
                        {
                            message    = "Wiele krawędzi spoza drzewa";
                            resultCode = Result.BadResult;
                            return;
                        }
                        notInTree = true;
                        if (!test.ContainsEdge(e))
                        {
                            message    = $"Wiele cykli z krawędzią {e}";
                            resultCode = Result.BadResult;
                            return;
                        }
                        test.DelEdge(e);
                    }
                }
            }
            if (test.EdgesCount != 0)
            {
                var e = test.GetEdges().First();
                message    = $"Brak cyklu z krawędzią {e}";
                resultCode = Result.BadResult;
                return;
            }
            resultCode = Result.Success;
            message    = "OK";
        }