1

我正在开发一个程序,该程序在用户输入的一系列顶点及其边权重上实现 Dijkstra 算法。在他们实际输入数据之前,我不知道用户要输入多少个顶点。(第一个输入值之一将是顶点的总数)我的问题是我不知道如何在没有硬编码的情况下为每个顶点创建一个节点,例如:

Vertex v1 = new Vertex("VERTEX INFO");
Vertex v2 = new Vertex("VERTEX INFO");
Vertex v3 = new Vertex("VERTEX INFO");

等等

更具体地说,我的代码基于此示例here。在 main 方法中,此代码对其顶点节点进行了硬编码。

这是我在上次尝试中获取用户输入时写的(它被丢弃了,因为我遇到了问题并重新开始)

    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();
        }

我将数组列表转换为整数数组以尝试根本不起作用,但决定留在代码中以防它在这里对我有帮助

4

1 回答 1

0

在用户输入时创建顶点,并将它们添加到列表中。

Scanner sc = new Scanner(System.in);
List<Vertex> vertexList = new LinkedList<>();

while(sc.hasNext()) {
    vertexList.add(createVertexFromString(sc.next());
}

createVertexFromString显然,这是您自己编写的一种方法。

于 2013-05-02T21:27:16.103 回答