我被困住了,恳请您的帮助。我以这种格式输入:

6
0 1 2
1 0 3 4

我在程序中需要这样:

int[][] edges = {
   {0,1}, {0,2},
   {1,2}, {1,3},
   {2,5},
   {3,2}, {3,4},
   {5,4}
};

我被困住了,以为我可能需要处理一个列表?这是我到目前为止的内容:
public class Part1 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int k = scanner.nextInt(); // number of vertices
        String[] input = new String[k];
        int[][] edges;
        String[] tokens = new String[k];
        int[] vertices = new int[k];
        int[] integers = new int[k];
        int p = 0;

        for (int i = 0; i < k; i++) {
            vertices[i] = i;
            input[i] = scanner.nextLine();
            tokens = input[i].split("[\\s+]");
            integers[i] = Integer.parseInt(tokens[i].trim());
            for (int j = 0; j < integers.length - 1; j++) {
                edges[p][i] = integers[0];
                edges[p][2] = integers[j];
                p++;

            }
        }
    }
}

我希望有一个人可以帮助我。

最佳答案

我想请您考虑用另一种方式表示图形。表示图形的常规方法(对于许多基本图形算法而言,也是便捷的方法)是Vector [],它是这样声明的列表数组。

Vector<Integer> graph = new Vector<Integer>[number_of_vertices];

访问graph [i]将返回包含顶点i邻居的Vector。因此,这种数据结构使您可以有效地动态添加边以及快速遍历邻居。一些示例代码来构造图形:
for (int i = 0; i < k; i++) {
  String line = scanner.nextLine();
  tokens = line.split(" ");
  int from = Integer.parseInt(line[0]);
  for (int j = 1; j < tokens.length; j++) {
    graph[from].add(Integer.parseInt(tokens[j]));
  }
}

编辑:请参见康德对无法使用通用数组的解决方法的响应。

10-07 19:34
查看更多