void Visit(EdgeWeightedGraph g, int v) { m_marked[v] = true; foreach (var e in g.Adj(v)) { int w = e.Other(v); if (m_marked[w]) { continue; } if (e.Weight() < m_distTo[w]) { m_edgeTo[w] = e; m_distTo[w] = e.Weight(); if (m_pq.contains(w)) { m_pq.change(w, m_distTo[w]); } else { m_pq.insert(w, m_distTo[w]); } } } }
void Relax(EdgeWeightDirectedGraph g, int v) { foreach (var e in g.Adj(v)) { int w = e.To(); if (m_distTo[w] > m_distTo[v] + e.Weight()) { m_distTo[w] = m_distTo[v] + e.Weight(); m_edgeTo[w] = e; if (m_pq.contains(w)) { m_pq.change(w, m_distTo[w]); } else { m_pq.insert(w, m_distTo[w]); } } } }