Exemplo n.º 1
0
        public void StartDijkstraMatrix()
        {
            try
            {
                if (StartNode == null)
                {
                    MessageBox.Show("Please select start node.", "Error", MessageBoxButton.OK,
                                    MessageBoxImage.Error);
                    return;
                }

                ClearGraph();
                var checkRes = CheckGraphsLinksWithMsg(true);
                if (checkRes == false)
                {
                    return;
                }
                var mappedList = MainModel.CreateMapedList(Model.NodesSource.Cast <NodeModel>(),
                                                           Model.LinksSource.Cast <LinkModel>());

                var resDijkstra = DijkstraTask4.StartDijkstra(mappedList, StartNode.Key);

                var resWindow = new Views.DijkstraResultWindow((Dictionary <string, UniversalGraphNodeData>)resDijkstra,
                                                               StartNode.Key);
                resWindow.Show();
            }
            catch (Exception e)
            {
                MessageBox.Show("Oops.. something goes wrong...\n\n" + e.Message, "Error!", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }
Exemplo n.º 2
0
        private void FindRadiusAndDim(List <MappedNode> mapped)
        {
            var minCost = Int32.MaxValue;
            var minName = "";
            List <UniversalGraphNodeData> minVector = null;

            var maxCost = 0;
            var maxName = "";
            List <UniversalGraphNodeData> maxVector = null;

            foreach (var mappedNode in mapped)
            {
                _result.AllCosts.Add(mappedNode.Node.Key, new List <KeyValuePair <string, int> >());
            }

            foreach (var mappedNode in mapped)
            {
                var djResult = DijkstraTask4.StartDijkstra(mapped, mappedNode.Node.Key);
                foreach (var universalGraphNodeData in djResult.Values)
                {
                    if (universalGraphNodeData.Node.Node.Key != mappedNode.Node.Key)
                    {
                        _result.AllCosts[universalGraphNodeData.Node.Node.Key].Add(new KeyValuePair <string, int>(mappedNode.Node.Key, universalGraphNodeData.Cost));
                    }
                    if (universalGraphNodeData.Node == mappedNode)
                    {
                        continue;
                    }

                    if (universalGraphNodeData.Cost > maxCost)
                    {
                        maxCost   = universalGraphNodeData.Cost;
                        maxName   = universalGraphNodeData.Node.Node.Key;
                        maxVector = djResult.Values.ToList();
                    }

                    if (universalGraphNodeData.Cost < minCost & universalGraphNodeData.Cost != -1)
                    {
                        minCost   = universalGraphNodeData.Cost;
                        minName   = universalGraphNodeData.Node.Node.Key;
                        minVector = djResult.Values.ToList();
                    }
                }
            }

            if (minVector != null)
            {
                _result.RadiusData = new KeyValuePair <int, string>(minCost, UniversalGraphNodeData.GetVector(minVector, minName));
            }
            else
            {
                _result.RadiusData = new KeyValuePair <int, string>(-1, "none");
            }

            if (maxVector != null)
            {
                _result.DiametrData = new KeyValuePair <int, string>(maxCost, UniversalGraphNodeData.GetVector(maxVector, maxName));
            }
            else
            {
                _result.DiametrData = new KeyValuePair <int, string>(-1, "none");
            }
        }