我很乐意请求你的帮助,因为我被困住了。我输入的格式如下:
6< - 顶点数
0 1 2< - 通过边缘
直接链接到顶点0的顶点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++;
}
}
}
}
我希望有人可以帮助我。
答案 0 :(得分:2)
我会请您考虑以不同的方式表示您的图表。表示图形的常规方法(以及许多基本图形算法的便捷方式)是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]));
}
}
编辑:请参阅康德对变通方法无法使用通用数组的响应。
答案 1 :(得分:1)
据我所知,java不允许使用泛型类型的数组。如何以这种方式修改示例:
Map<Integer,Vector<Integer>> graph = new HashMap<Integer, Vector<Integer>>();
for (int i = 0; i < k; i++) {
String line = scanner.nextLine();
tokens = line.split(" ");
int from = Integer.parseInt(line[0]);
Vector<Integer> = v new Vector<Integer>();
for (int j = 1; j < tokens.length; j++) {
v.add(Integer.parseInt(tokens[j]));
}
graph.put(from, v);
}
当你想要追溯价值时,你写道:
Vector<Integer> v = graph.get(0);