示例#1
0
        private void BellmanFordStart(object sender, RoutedEventArgs e)
        {
            var dialog = new Dijkstra(true);


            dialog.ShowDialog();

            int startNode = dialog.StartNode - 1;

            string message = "";

            for (int i = 0; i < Graph.NodesNr; ++i)
            {
                if (i == startNode)
                {
                    continue;
                }
                List <int> path = Directed.BellmanFord(Graph, startNode, i);

                message += string.Format("Node {0} : ", i + 1);
                if (path != null)
                {
                    path.ForEach(n => message += (n + 1) + " ");
                }
                else
                {
                    message += "brak sciezki";
                }

                message += Environment.NewLine;
            }

            MessageBox.Show(message);
        }
示例#2
0
        private void Floyd(object sender, RoutedEventArgs e)
        {
            var john = Directed.FloydWarshall(Graph);

            var message = "";

            for (int y = 0; y < Graph.NodesNr; ++y)
            {
                for (int x = 0; x < Graph.NodesNr; ++x)
                {
                    if (john[y, x] < 20000000)
                    {
                        message += john[y, x];
                        if (john[y, x] < 10)
                        {
                            message += " ";
                        }
                        if (john[y, x] < 100)
                        {
                            message += " ";
                        }
                        message += " ";
                    }
                    else
                    {
                        message += " -  ";
                    }
                }
                message += Environment.NewLine;
            }

            MessageBox.Show(message);
        }
示例#3
0
        private void BellmanFord(object sender, RoutedEventArgs e)
        {
            var dialog = new Dijkstra();

            dialog.ShowDialog();

            int startNode = dialog.StartNode - 1;
            int endNode   = dialog.EndNode - 1;



            List <int> path = Directed.BellmanFord(Graph, startNode, endNode);

            string message = "Znaleziona sciezka : " + Environment.NewLine;

            if (path != null)
            {
                path.ForEach(n => message += (n + 1) + " ");
            }
            else
            {
                message = "Nie znaleziono sciezki";
            }

            MessageBox.Show(message);
        }
示例#4
0
 public Fighter(string id, ICollection<IEnumerable<ChipCell>> chips, Directed tail)
 {
     Id = id;
     Body = new LinkedList<Directed>();
     Chips = chips;
     Tail = tail;
 }
示例#5
0
 public void CutTail()
 {
     if (Body.Count == 0)
     {
         Tail = Head;
     }
     else
     {
         Tail = Body.Last.Value;
         Body.RemoveLast();
     }
 }
示例#6
0
        private void TopologicSorting(object sender, RoutedEventArgs e)
        {
            var sorted = Directed.TopologicSorting(Graph);

            string message = "";

            foreach (var node in sorted)
            {
                message += (node + 1) + Environment.NewLine;
            }

            MessageBox.Show(message);
        }
示例#7
0
        private void ShowSilne(object sender, RoutedEventArgs e)
        {
            var cycles = Directed.spojne(Graph);

            var message = "Znalazłem takie silne spojne skladowe : ";

            foreach (var cycle in cycles)
            {
                message += Environment.NewLine;
                foreach (var node in cycle)
                {
                    message += (node + 1) + " ";
                }
            }

            MessageBox.Show(message);
        }
示例#8
0
 public void Grow(Direction direction, int length = 1)
 {
     for (var i = 0; i < length; i++)
     {
         if (Body.First == null && Tail == null) continue;
         if (Body.First == null && Head == null)
         {
             Head = Directed.ToDirection(Tail, direction);
             continue;
         }
         if (Head != null)
         {
             Body.AddFirst(Head);
         }
         Head = Directed.ToDirection(Body.First.Value, direction);
     }
 }
示例#9
0
        private void BFDistance(object sender, RoutedEventArgs e)
        {
            var message = "";

            for (int y = 0; y < Graph.NodesNr; ++y)
            {
                for (int x = 0; x < Graph.NodesNr; ++x)
                {
                    var distList = Directed.BellmanFord(Graph, x, y);
                    if (distList == null)
                    {
                        message += " -  ";
                        continue;
                    }
                    var dist = 0;
                    for (int i = 1; i < distList.Count; ++i)
                    {
                        dist += Graph.getWeight(distList[i - 1], distList[i]);
                    }
                    if (dist < 20000000)
                    {
                        message += dist;
                        if (dist < 10)
                        {
                            message += " ";
                        }
                        if (dist < 100)
                        {
                            message += " ";
                        }
                        message += " ";
                    }
                    else
                    {
                        message += " -  ";
                    }
                }
                message += Environment.NewLine;
            }

            MessageBox.Show(message);
        }
示例#10
0
        private void Johnson(object sender, RoutedEventArgs e)
        {
            var message = "";

            try
            {
                var john = Directed.Johnson(Graph);



                for (int y = 0; y < Graph.NodesNr; ++y)
                {
                    for (int x = 0; x < Graph.NodesNr; ++x)
                    {
                        if (john[y, x] < 20000000)
                        {
                            message += john[y, x];
                            if (john[y, x] < 10)
                            {
                                message += " ";
                            }
                            if (john[y, x] < 100)
                            {
                                message += " ";
                            }
                            message += " ";
                        }
                        else
                        {
                            message += " -  ";
                        }
                    }
                    message += Environment.NewLine;
                }
            }
            catch (Exception)
            {
                message = "Wykryto ujemny cykl (Sprawdzony za pomoca zewnetrznej metody)";
            }

            MessageBox.Show(message);
        }
示例#11
0
        private void ShowCycles(object sender, RoutedEventArgs e)
        {
            var cycles = Directed.circuts(Graph);

            var message = "Znalazłem takie cykle : ";

            foreach (var cycle in cycles)
            {
                //for (int i = 1; i < cycle.Count; ++i)
                //{
                //    if(Graph.GetConnection(cycle[i-1], cycle))
                //}
                message += Environment.NewLine;
                foreach (var node in cycle)
                {
                    message += (node + 1) + " ";
                }
            }

            MessageBox.Show(message);
        }
示例#12
0
 private void MaxSpojna(object sender, RoutedEventArgs e)
 {
     Graph.Set(Directed.Directedmaxspojny(Graph));
     Graph.OnChange();
     Renderer.Displayer = new DirectedCircleDisplayer();
 }
示例#13
0
        private void UjemneCykle(object sender, RoutedEventArgs e)
        {
            var test = Directed.ujemnyCykl(Graph, Graph.weights);

            MessageBox.Show(test ? "Jest ujemny cykl" : "Nie ma ujemnego cyklu");
        }
示例#14
0
文件: Edge.cs 项目: avalsa/TaskCore
 /// <summary> GetHashCode </summary>
 public override int GetHashCode()
 {
     return(Vertex1.GetHashCode() ^ Vertex2.GetHashCode() ^ Directed.GetHashCode());
 }