public void ErrorCase_ReturnsValue_7()
        {
            var biconnectedComponents = new BiconnectedComponents(_basicWorldV2);
            var valid = biconnectedComponents.GetValidPlacesForMaxPath(0, 24);

            Assert.IsTrue(valid[0]);
            Assert.IsTrue(valid[1]);
            Assert.IsTrue(valid[2]);
            Assert.IsTrue(valid[3]);
            Assert.IsFalse(valid[4]);
            Assert.IsTrue(valid[5]);
            Assert.IsTrue(valid[6]);
            Assert.IsTrue(valid[7]);
            Assert.IsTrue(valid[8]);
            Assert.IsFalse(valid[9]);
            Assert.IsTrue(valid[10]);
            Assert.IsTrue(valid[11]);
            Assert.IsTrue(valid[12]);
            Assert.IsTrue(valid[13]);
            Assert.IsFalse(valid[14]);
            Assert.IsTrue(valid[15]);
            Assert.IsTrue(valid[16]);
            Assert.IsTrue(valid[17]);
            Assert.IsTrue(valid[18]);
            Assert.IsFalse(valid[19]);
            Assert.IsTrue(valid[20]);
            Assert.IsTrue(valid[21]);
            Assert.IsTrue(valid[22]);
            Assert.IsTrue(valid[23]);
            Assert.IsTrue(valid[24]);
        }
        public void GetValidPlacesForMaxPath_CheckStepsForBCCH_try1step1()
        {
            var biconnectedComponents = new BiconnectedComponents(_basicWorldT1S1);
            var valid = biconnectedComponents.GetValidPlacesForMaxPath(1, 24);

            Assert.IsFalse(valid[0]);
            Assert.IsTrue(valid[1]);
            Assert.IsTrue(valid[2]);
            Assert.IsTrue(valid[3]);
            Assert.IsTrue(valid[4]);
            Assert.IsTrue(valid[5]);
            Assert.IsTrue(valid[6]);
            Assert.IsFalse(valid[7]);
            Assert.IsTrue(valid[8]);
            Assert.IsTrue(valid[9]);
            Assert.IsTrue(valid[10]);
            Assert.IsTrue(valid[11]);
            Assert.IsFalse(valid[12]);
            Assert.IsTrue(valid[13]);
            Assert.IsTrue(valid[14]);
            Assert.IsTrue(valid[15]);
            Assert.IsTrue(valid[16]);
            Assert.IsFalse(valid[17]);
            Assert.IsTrue(valid[18]);
            Assert.IsTrue(valid[19]);
            Assert.IsTrue(valid[20]);
            Assert.IsTrue(valid[21]);
            Assert.IsTrue(valid[22]);
            Assert.IsTrue(valid[23]);
            Assert.IsTrue(valid[24]);
        }
        public void GetValidPlacesForMaxPath_AlmostAllBlocks_AreAllValid()
        {
            var biconnectedComponents = new BiconnectedComponents(_basicWorldV1);
            var valid = biconnectedComponents.GetValidPlacesForMaxPath(1, 11);

            Assert.IsFalse(valid[0]);
            Assert.IsTrue(valid[1]);
            Assert.IsTrue(valid[2]);
            Assert.IsTrue(valid[3]);
            Assert.IsTrue(valid[4]);
            Assert.IsFalse(valid[5]);
            Assert.IsFalse(valid[6]);
            Assert.IsFalse(valid[7]);
            Assert.IsTrue(valid[8]);
            Assert.IsTrue(valid[9]);
            Assert.IsTrue(valid[10]);
            Assert.IsTrue(valid[11]);
            Assert.IsFalse(valid[12]);
            Assert.IsTrue(valid[13]);
            Assert.IsTrue(valid[14]);
            Assert.IsTrue(valid[15]);
            Assert.IsTrue(valid[16]);
            Assert.IsFalse(valid[17]);
            Assert.IsTrue(valid[18]);
            Assert.IsTrue(valid[19]);
            Assert.IsTrue(valid[20]);
            Assert.IsTrue(valid[21]);
            Assert.IsTrue(valid[22]);
            Assert.IsTrue(valid[23]);
            Assert.IsTrue(valid[24]);
        }
        public void CutPoints_AreAllValid_Count3()
        {
            var biconnectedComponents = new BiconnectedComponents(_basicWorldV3);

            Assert.AreEqual(4, biconnectedComponents.CutPoints.Count);
            Assert.IsTrue(biconnectedComponents.CutPoints.Contains(1));
            Assert.IsTrue(biconnectedComponents.CutPoints.Contains(2));
            Assert.IsTrue(biconnectedComponents.CutPoints.Contains(11));
            Assert.IsTrue(biconnectedComponents.CutPoints.Contains(12));
        }
        private void CalculateBiconnectedComponents(IGraph graph)
        {
            var result = new BiconnectedComponents().Run(graph);

            if (result.Components.Count > 0)
            {
                // generate a color array
                var colors = GenerateColors(false);

                // sets the style/tag for the edges
                for (var i = 0; i < result.Components.Count; i++)
                {
                    var component = result.Components[i];
                    var color     = colors[i];

                    component.Edges.ForEach(edge => { InitializeTag(edge).CurrentColor = color; });
                    component.Nodes.ForEach(node => { InitializeTag(node).CurrentColor = color; });
                }
            }
        }
예제 #6
0
        static void Main(string[] args)
        {
            if (args.Length == 0)
            {
                WriteOutRelevantArguments();
                return;
            }
            Dictionary <string, string> splitedArgs = ConsoleAppHelper.SplitArguments(args);

            LoadDefaultArguments(splitedArgs);
            if (!ValidArguments(splitedArgs))
            {
                return;
            }
            _numOfGridFiles = int.Parse(splitedArgs["num"]);
            _retries        = int.Parse(splitedArgs["retries"]);
            bool oneBcc = bool.Parse(splitedArgs["one-bcc"]);

            GridBase generator;

            switch (splitedArgs["type"])
            {
            case "basic":
                generator = new BasicGenerator(splitedArgs);
                break;

            case "rooms":
                generator = new RoomsGenerator(splitedArgs);
                break;

            case "alternate":
                generator = new AlternateGenerator(splitedArgs);
                break;

            default:
                Console.WriteLine($"Type \"{splitedArgs["type"]}\" not supported!");
                return;
            }
            List <string> createdFiles = new List <string>();


            for (int gridFileId = 1; gridFileId <= _numOfGridFiles; gridFileId++)
            {
                int retryIterationsLeft = _retries;
                while (retryIterationsLeft > 0)
                {
                    generator.InitBoard();
                    generator.AddBlockedLocationsStartAndGoal();
                    if (generator.GoalReachable())
                    {
                        string outFileContent = generator.GetGrid();
                        string outFileName    = generator.GetFileName(gridFileId, _numOfGridFiles);
                        if (oneBcc)
                        {
                            World w = new World(outFileContent, new NoneHeuristic());
                            BiconnectedComponents bcc = new BiconnectedComponents(w);
                            if (bcc.Blocks.Count != 1) //One block that contains the start& end
                            {
                                retryIterationsLeft--;
                                continue;
                            }
                            if (!AllFreeAreInThisBlock(w, bcc.Blocks.First.Value))  //check that there are no free spots that are not reachable
                            {
                                retryIterationsLeft--;
                                continue;
                            }
                        }
                        File.WriteAllText(outFileName, outFileContent, Encoding.ASCII);
                        createdFiles.Add(outFileName);
                        break;
                    }
                    retryIterationsLeft--;
                }
                if (retryIterationsLeft == 0)
                {
                    Console.WriteLine($"Couldn't build map for {_retries} times - Quiting and removing files created in this session if any");
                    foreach (var createdFile in createdFiles)
                    {
                        File.Delete(createdFile);
                    }
                    return;
                }
            }
        }
        public void BlocksCount_ReturnsValue_7()
        {
            var biconnectedComponents = new BiconnectedComponents(_basicWorldV1);

            Assert.AreEqual(7, biconnectedComponents.Blocks.Count);
        }
        public void Constructor_ReturnsValue_NotNull()
        {
            var biconnectedComponents = new BiconnectedComponents(_basicWorldV1);

            Assert.IsNotNull(biconnectedComponents);
        }