私は、一連の頂点とユーザーが入力したエッジの重みにダイクストラのアルゴリズムを実装するプログラムに取り組んでいます。ユーザーが実際にデータを入力するまで、ユーザーが入力しようとしている頂点の数はわかりません。(最初の入力値の 1 つは頂点の総数になります) 私の問題は、次のようなハードコーディングを行わずに各頂点のノードを作成する方法がわからないことです。
Vertex v1 = new Vertex("VERTEX INFO");
Vertex v2 = new Vertex("VERTEX INFO");
Vertex v3 = new Vertex("VERTEX INFO");
等
より具体的に言うと、コードはこの例hereに基づいています。メイン メソッドでは、このコードの Vertex ノードがハード コーディングされています。
これは、以前の試行でユーザー入力を取得する際に書いたものです (途中で問題が発生し、最初からやり直したため、破棄されました)
ArrayList leftPoints = new ArrayList();
ArrayList rightPoints = new ArrayList();
ArrayList weights = new ArrayList();
Scanner input = new Scanner(System.in);
String searchInput = input.nextLine();
String[] searchCommand = searchInput.split(" ");
for(int i = 0; i <searchCommand.length; i++){
System.out.print(searchCommand[i] + " ");
}
searchInput = input.nextLine();
int totalVertices = Integer.parseInt(searchInput);
while (input.hasNextLine()){
searchInput = input.nextLine();
searchCommand = searchInput.split(" ");
int x = Integer.parseInt(searchCommand[0]);
int y = Integer.parseInt(searchCommand[1]);
int weight = Integer.parseInt(searchCommand[2]);
leftPoints.add(x);
rightPoints.add(y);
weights.add(weight);
}
int[] x = new int[leftPoints.size()];
int[] y = new int[rightPoints.size()];
int[] pathWeights = new int[weights.size()];
for (int p = 0; p < x.length; p++){
x[p] = ((Integer) leftPoints.get(p)).intValue();
y[p] = ((Integer) rightPoints.get(p)).intValue();
pathWeights[p] = ((Integer) weights.get(p)).intValue();
}
まったく機能しない試みのために配列リストを整数配列に変換しましたが、ここで役立つ場合に備えてコードに残すことにしました