私は、入力ファイルから隣接行列を作成する方法を理解するのに苦労しています。入力ファイルは、ノードの有向グラフ、重み付きグラフを表すものとします。入力テキストファイルを使用して、有向グラフを表現するための隣接行列の作成方法[java]?
目的は、繰り返し深さの最初の検索を行うことができるプログラムを作成することですが、私は本当に割り当てのデータ入力部分に固執しています。
入力テキストファイルには、おそらく次のようになります。
各ノードは、2行のテキストで表現されます。たとえば、一番上の行にある最初の「S」はノードの名前であり、2番目の「S」は開始ノードであることを示し、3番目の「n」はゴールノードではなく通常のノードであることを示し、これは 'g'で示されます。 2行目に
1の重み付き距離と「S」最初ある「B」に接続された2つのノード、および2
第三の重み付き距離を有する第二ある「E」であります行が空白であると想定され、パターンが繰り返されます。
S S n
B 1 E 2
B N n
C 2 F 3
C N n
D 2 GA 4
D N n
GA 1
E N n
B 1 F 3 H 6
F N n
I 3 GA
3 C 1
GA N g
H N n
I 2 GB 2 F 1
I N n
GA 2 GB 2
GB N g
私は本当にこれに固執しています。私はファイルをスキャンするためにバッファリングされたリーダーを使用していますが、私はScannerを使用する方が簡単だろうと思っています。
私は現在、名前を持つ属性を持つNodeオブジェクトを作成しようとしています。また、何らかのリンクリストを使って他の隣接するNodeオブジェクトへのリンクを作成しようとしています。私はまた、ノードオブジェクトの配列を使用することを検討しましたが、どのノードがどの他のノードに接続するかを表現する方法と、2次元配列を使用して隣接行列に構築する方法を実際には分かりません。
任意の提案をいただければ幸い私の質問は、学術的に重要ではない場合、私は他の人に
編集謝罪ので、私は初心者だ:のactionPerformed ます。public void(のActionEvent e)は:私のコードは次のようなものです
: {if(e.getSource() == openButton)
{
returnVal = fileChooser.showOpenDialog(null);
if(returnVal == JFileChooser.APPROVE_OPTION)
{
selected_file = fileChooser.getSelectedFile();
String file_name = fileChooser.getSelectedFile().getName();
file_name = file_name.substring(0, file_name.indexOf('.'));
try
{
BufferedWriter buff_writer = null;
File newFile = new File("."+file_name+"_sorted.txt");
boolean verify_creation = newFile.createNewFile();
//if (verify_creation)
// System.out.println("file created successfully");
//else
// System.out.println("file already present in specified location");
file_reader1 = new BufferedReader(new FileReader(selected_file));
file_reader2 = new BufferedReader(new FileReader(selected_file));
FileWriter file_writer = new FileWriter(newFile.getAbsoluteFile());
buff_writer = new BufferedWriter(file_writer);
//find the number of nodes in the file
while((currentLine = file_reader1.readLine()) != null)
{
k++;
System.out.println("value of k: " + k);
}
nodeArray = new Node[k];
while((currentLine = file_reader2.readLine()) != null)
{
//System.out.print(currentLine);
String[] var = currentLine.split(" ");
nodeArray[x] = new Node(var[0], var[1], var[2]);
nodeArray[x].setLink1(new Node(var[3], null, null));
}
buff_writer.close();
file_writer.close();
}
catch (Exception e1)
{
e1.printStackTrace();
}
}
}
編集#2
私のノードオブジェクトは、次のようになります210
public Node(String n, String t1, String t2)
{
name = n;
type1 = t1;
type2 = t2;
link1 = null;
link2 = null;
link3 = null;
link4 = null;
link5 = null;
link6 = null;
これまでに試したコードを投稿して、どこで失敗するか教えてください。 – bradimus
確かに、私はちょうど本当にこだわっていると思います。どのノードが他のどのノードに接続しているかを把握するために、リンクされたリストを作成する必要がありますか?または、これらのオブジェクトをすべて作成することなく、ファイルを直接2次元配列に読み込む方法がありますか?私にとっては難しいのは、私はノードオブジェクトの数が不明であるだけでなく、各ノードがお互いに持つ可能性のある未知数の接続についても考慮しようとしていることです。これは私にとって本当に混乱しています。 – GScott
おかしい。私は数週間前に非常によく似た質問に答えたと思います。まったく同じ入力例のように。あなたが気にしないなら、これはどんな種類の授業を分かち合うことができますか?私は自分の答えを見つけることができませんでした...しかし、私はあなたのためにもっと "概念的"なものを置いています... – GhostCat