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]); } }
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(); }