質問: ""; return ret; } } ```
回答: 1始点となるノードを決定 初めは, 決め打ちで始点を決定します. 2始点となるノード以外の点を、未定義(または無限大)に設定 Double.POSITIVE_INFINITYを使うと正の無限大に設定できます. 3始点のノードに隣接する全ノードの距離を求める ソースを読むと, AdjacencyList#getWeightedEdges(int id)で始点ノードから伸びる有向グラフのリストを取得できるようです.このリストから距離d[i]を更新できると思います. 4最短距離のノードを確定する 距離の集合d[i]の中で最も小さい&選択されていないノードを確定します.具体的には,始点の距離dは0なので,距離集合d[i]の中では最小になりますが,始点は既に選択済みとして扱われるべきなので,最短距離ノードとして確定してはいけません. 5確定したノードに隣接している全ノードの距離を求める これは,3と同じ処理で解決できると思います. * 新しく計算された距離が現在の距離より短い ⇒ 新しく計算された距離を、確定距離とする * それ以外 ⇒ 現在の距離を、そのまま確定距離としておく 6現時点で、確定していないノードのうち最短距離のノードを確定する これも4と同じ処理で解決できると思います. 一つわからないのは,int[] d = new int[100]の部分で,多分s.size()だと思います.(始点から頂点への重み和の最小値の数は,頂点の数しかないため) ``` List s = vertices; //初期値S=V int[] d = new int[100]; //視点から頂点への重み和の最小値 int[] p = new int[s.size()]; //1こ前の頂点 while(!s.isEmpty()){ int u = 0; } ```