Exemplo n.º 1
0
        // graph transposition
        protected List <TreeNodeModel <int, int> > TransposeGraph(List <TreeNodeModel <int, int> > graph)
        {
            var result = new List <TreeNodeModel <int, int> >();

            graph.ForEach(treeNode =>
            {
                treeNode.Neighbours.ForEach(neighbour =>
                {
                    var newElement = new TreeNeighbourNode <int, int> {
                        Name = treeNode.Name
                    };

                    if (!result.Any(x => x.Name == neighbour.Name))
                    {
                        var neighbourList = new List <TreeNeighbourNode <int, int> >()
                        {
                            newElement
                        };
                        result.Add(new TreeNodeModel <int, int>(neighbour.Name, neighbourList));
                    }
                    else
                    {
                        result.Where(x => x.Name == neighbour.Name).FirstOrDefault()
                        .Neighbours
                        .Add(newElement);
                    }
                });
            });

            return(result);
        }
Exemplo n.º 2
0
        private async void KruskalStartBtn_Click(object sender, EventArgs e)
        {
            var someException = false;
            var tree          = new List <TreeNodeModel <int, int> >();

            var fileName = KruskalSourceFileTb.Text;

            if (string.IsNullOrEmpty(fileName))
            {
                MessageBox.Show("Brak pliku z którego mam pobrać dane");
                return;
            }

            try
            {
                var lines = File.ReadAllLines(fileName);

                for (int iLines = 0; iLines < lines.Length; iLines++)
                {
                    var values = lines[iLines].Split(';');

                    var node = Int32.Parse(values[0]);
                    var list = new List <TreeNeighbourNode <int, int> >();

                    for (int jValues = 1; jValues < values.Length;)
                    {
                        var treeNeighourNode = new TreeNeighbourNode <int, int>
                        {
                            Name   = Int32.Parse(values[jValues++]),
                            Weight = Int32.Parse(values[jValues++])
                        };

                        list.Add(treeNeighourNode);
                    }

                    var treeNodeModel = new TreeNodeModel <int, int>(node, list);
                    tree.Add(treeNodeModel);
                }
            }
            catch (Exception ex)
            {
                var content = ex.Message;

                content += "\nLinia w pliku powinna zawierać dane:\nWierzhołek;Sasiad;Waga;Sasiad;Waga;Sasiad;Waga;...";

                MessageBox.Show(content);

                someException = true;
            }

            if (!someException)
            {
                await StartAlgorithm(new KruskalProblem(tree));
            }

            KruskalSourceFileTb.Text = "";
        }
        protected void CreateDFSGraph(out List <GraphEdge> dfsGraphEdges, out List <TreeNodeModel <int, int> > dfsGraph)
        {
            dfsGraphEdges = _edges.Where(edge => edge.IsVisited).ToList();

            var graph = new List <TreeNodeModel <int, int> >();

            dfsGraphEdges.ForEach(dfsGraphEdge =>
            {
                var neighbour1 = new TreeNeighbourNode <int, int> {
                    Name = dfsGraphEdge.Node2
                };
                var neighbour2 = new TreeNeighbourNode <int, int> {
                    Name = dfsGraphEdge.Node1
                };

                var dfsGraphNode = graph.Where(x => x.Name == dfsGraphEdge.Node1).FirstOrDefault();
                if (dfsGraphNode == null)
                {
                    var neighbours = new List <TreeNeighbourNode <int, int> > {
                        neighbour1
                    };

                    var treeNode = new TreeNodeModel <int, int>(dfsGraphEdge.Node1, neighbours);

                    graph.Add(treeNode);
                }
                else
                {
                    dfsGraphNode.Neighbours.Add(neighbour1);
                }

                dfsGraphNode = graph.Where(x => x.Name == dfsGraphEdge.Node2).FirstOrDefault();
                if (dfsGraphNode == null)
                {
                    var neighbours = new List <TreeNeighbourNode <int, int> > {
                        neighbour2
                    };

                    var treeNode = new TreeNodeModel <int, int>(dfsGraphEdge.Node2, neighbours);

                    graph.Add(treeNode);
                }
                else
                {
                    dfsGraphNode.Neighbours.Add(neighbour2);
                }
            });

            dfsGraph = graph;
        }
Exemplo n.º 4
0
        private async void ArticulationStartBtn_Click(object sender, EventArgs e)
        {
            var someException = false;
            var tree          = new List <TreeNodeModel <int, int> >();

            var fileName = ArticulationSourceFileTb.Text;

            if (string.IsNullOrEmpty(fileName))
            {
                MessageBox.Show("Brak pliku z którego mam pobrać dane");
                return;
            }

            try
            {
                var lines = File.ReadAllLines(fileName);

                for (int iLines = 0; iLines < lines.Length; iLines++)
                {
                    var values = lines[iLines].Split(';');

                    int nodeFrom, nodeTo;
                    int weight = 0;

                    Int32.TryParse(values[0], out nodeFrom);
                    Int32.TryParse(values[1], out nodeTo);

                    if (values.Length > 2)
                    {
                        Int32.TryParse(values[2], out weight);
                    }

                    var node = tree.Where(x => x.Name == nodeFrom).FirstOrDefault();

                    var neighbour = new TreeNeighbourNode <int, int>
                    {
                        Name   = nodeTo,
                        Weight = weight
                    };

                    if (node == null)
                    {
                        var neighbours = new List <TreeNeighbourNode <int, int> >();
                        neighbours.Add(neighbour);
                        tree.Add(new TreeNodeModel <int, int>(nodeFrom, neighbours));
                    }
                    else
                    {
                        node.Neighbours.Add(neighbour);
                    }
                }
            }
            catch (Exception ex)
            {
                var content = ex.Message;

                content += "\nLinia w pliku powinna zawierać dane:\nWierzhołek;Wierzhołek;Waga (Waga opcjonalnie)";

                MessageBox.Show(content);

                someException = true;
            }

            if (!someException)
            {
                await StartAlgorithm(new ArticulationBridgeProblem(tree));
            }

            ArticulationSourceFileTb.Text = "";
        }