我这里有一段代码。这是我的 Dijkstra 实现的一个片段。在这里,我们实例化了 4 个顶点,每个顶点都有指定的边及其与顶点(节点)的距离。如果将数据直接输入到主类中,则此代码简单且有益。
Vertex v0 = new Vertex("Redvile");
Vertex v1 = new Vertex("Blueville");
Vertex v2 = new Vertex("Greenville");
Vertex v3 = new Vertex("Orangeville");
Vertex v4 = new Vertex("Purpleville");
v0.adjacencies = new Edge[]{ new Edge(v1, 5),
new Edge(v2, 10),
new Edge(v3, 8) };
v1.adjacencies = new Edge[]{ new Edge(v0, 5),
new Edge(v2, 3),
new Edge(v4, 7) };
v2.adjacencies = new Edge[]{ new Edge(v0, 10),
new Edge(v1, 3) };
v3.adjacencies = new Edge[]{ new Edge(v0, 8),
new Edge(v4, 2) };
v4.adjacencies = new Edge[]{ new Edge(v1, 7),
new Edge(v3, 2) };
但是,我的数据来自文件。我必须读取文件并创建顶点的实例以及每个顶点上的边(邻接)。我在实现此功能时遇到问题。也就是说,我需要一个代码,将上面的这段代码转换为数据来自文件的东西。
这是我的示例数据:
a0 - a1,1.6
a1 - a0,1.6 * a2,0.85 * a3,0.5
a2 - a1,0.85 * a34,1.2 * a39,0.65
a3 - a1,0.5 * a4,0.2 * a5,0.1
a4 - a3,0.2 * a5,0.2
a5 - a4,0.1 * a6,1 * a36,0.65
a6 - a5,1 * a7,1.5 * a14,0.45
a7 - a6,1.5 * a8,0.18 * a11,1.2
a8 - a7,0.18 * a9,1
a9 - a8,1
a10 - a13,1.9
a0-a10 是顶点,a1,1.6是其他的表示以 (vertex,distance) 格式连接到顶点的邻接或边。
到目前为止,我能够读取这个文件并将每一行放在一个 ArrayList 上。我现在的问题基本上是如何实例化每个顶点并添加邻接关系。
这就是我读取文件的方式:
private void readFile(String fileName) {
try{
FileReader file = new FileReader(fileName);
Scanner sc = new Scanner(file);
int i = 0;
while (sc.hasNextLine()) {
input.add(sc.nextLine());
i++;
}
setNodes();
System.out.println();
file.close();
} catch(Exception e){
System.out.println(e);
}
}
输入是每行包含文件所有内容的arrayList。另一方面,节点将拥有所有顶点的列表。
public void setNodes() {
System.out.println();
for(int i=0; i<input.size(); i++) {
line = this.input.get(i);
nodes.add(line.substring(0,line.indexOf("-")).trim());
}
}
还,
PS我也是数据类型的问题。我的 arrayList 是字符串,顶点是 Vertex 类型,这是我的代码中定义的类。
如果此描述不充分,请随时发表评论。谢谢你和欢呼!