private void Initial(string start, int amount,graph g)
 {
     dist = new List<Vertex>(g.vertex);
     for (int i = 0; i < amount ; i++)
     {
         if (dist[i].index == start)
         {
             dist[i].distance = 0;
         }
         else
         {
             dist[i].distance = int.MaxValue;
         }
         queue.Add(dist[i]);
     }
 }
Ejemplo n.º 2
0
        public Form1()
        {
            var  graph        = new graph();
            Node SelectedNode = null;

            InitializeComponent();
            this.MouseClick += (sender, e) =>
            {
                switch (e.Button)
                {
                // 左クリック
                case MouseButtons.Left:
                    Form1_LeftClick(sender, e);
                    break;

                // 右クリック
                case MouseButtons.Right:
                    Form1_RightClick(sender, e);
                    break;
                }
            };
        }
        public List<Vertex> queue = new List<Vertex>(); //Queue of vertexes

        #endregion Fields

        #region Constructors

        public Dijkstra(graph g,string start)
        {
            int amount=g.vertex.Count;
            int amount2 = g.edges.Count;
            Initial(start, amount, g);

            while (queue.Count > 0)
            {
                Vertex u = FindVertex();

                for (int v = 0; v < amount2; v++)
                {
                    if (g.edges[v].cost > 0&& g.edges[v].node1==u) //Checking for edges where u is the first node in the edge
                    {
                        int alt = g.edges[v].node1.distance + g.edges[v].cost;

                        if(alt<g.edges[v].node2.distance){
                            g.edges[v].node2.distance = alt;
                        }
                    }
                }
            }
        }
 static void Main(string[] args)
 {
     graph x = new graph();
     Console.WriteLine("Enter Starting Node (node0-4): ");
     string start = Console.ReadLine();
     x.Add("node0");
     x.Add("node1");
     x.Add("node2");
     x.Add("node3");
     x.Add("node4");
     x.AddEdge(x.vertex[0],x.vertex[1],5);
     x.AddEdge(x.vertex[0], x.vertex[2], 8);
     x.AddEdge(x.vertex[1], x.vertex[3], 7);
     x.AddEdge(x.vertex[2], x.vertex[4], 3);
     x.AddEdge(x.vertex[3], x.vertex[4], 5);
     Dijkstra test = new Dijkstra(x,start);
     foreach (Vertex e in test.dist)
     {
         Console.Write("Distance to "+e.index+": ");
         Console.WriteLine(e.distance);
     }
     Console.WriteLine();
 }