public IList BreadthFirstSearch(BatteryStation s) { UnmarkAll(); IList l = new ArrayList(); Queue<BatteryStation> q = new Queue<BatteryStation>(); q.Enqueue(s); l.Add(s); s.Mark = true; while (q.Count > 0) { BatteryStation n = q.Dequeue(); BatteryStation c = null; while ((c = GetNextUnMarked(GetAdjacencies(n))) != null) { c.Mark = true; q.Enqueue(c); l.Add(c); } } return l; }
public void AddEdge(BatteryStation station, double distance, bool twoWay) { Edge newEdge = new Edge(this, station, distance); edges.Add(newEdge); if (twoWay) station.AddEdge(this, distance, false); }
public IList DepthFirstSearch(BatteryStation st) { UnmarkAll(); IList l = new ArrayList(); Stack<BatteryStation> s = new Stack<BatteryStation>(); s.Push(st); l.Add(st); st.Mark = true; while (s.Count != 0) { BatteryStation n = GetNextUnMarked(GetAdjacencies(s.Peek())); if (n != null) { n.Mark = true; l.Add(n); s.Push(n); } else { s.Pop(); } } return l; }
public bool ContainsStation(BatteryStation station) { return stations.Contains(station); }
public void BreathFirstSearch(BatteryStation v) { throw new System.NotImplementedException(); }
public void AddStation(BatteryStation station) { if (!stations.Contains(station)) stations.Add(station); }
public void AddEdge(BatteryStation from, BatteryStation to, double distance, bool twoWay) { if (FindEdge(from, to) == null) from.AddEdge(to, distance, twoWay); }
public void RemoveEdge(BatteryStation from, BatteryStation to) { Edge e_from = FindEdge(from, to); Edge e_to = FindEdge(to, from); if (e_from != null) e_from.From.RemoveEdge(e_from); if (e_to != null) e_to.From.RemoveEdge(e_to); }
public void RemoveBatteryStation(BatteryStation station) { stations.Remove(station); IList<BatteryStation> adjList = GetAdjacencies(station); foreach (BatteryStation bs_adj in adjList) RemoveEdge(station, bs_adj); }
public bool IsAdjacent(BatteryStation startStation, BatteryStation endStation) { return (FindEdge(startStation, endStation) != null); }
public IList<BatteryStation> GetAdjacencies(BatteryStation station) { IList<BatteryStation> adjStations = new List<BatteryStation>(); IEnumerator ien = station.EdgeList().GetEnumerator(); while (ien.MoveNext()) { Edge e = (Edge)ien.Current; adjStations.Add(e.To); } return adjStations; }
public Edge FindEdge(BatteryStation from, BatteryStation to) { Edge edge = null; foreach (Edge e in from.EdgeList()) { if (e.To.Equals(to)) edge = e; } return edge; }
public Edge(BatteryStation From, BatteryStation To, double distance) { this._from = From; this._to = To; this._distance = distance; }