我需要创建输入图(带有向后边的图)。例如:1-st图的边缘从1到2,从2到3;输入图的边长为3到2,从2到1。 问题是我正在创建矩阵(N ^ N内存使用)。如何使用更少的内存来完成这项任务?
import java.util.Scanner;
public class ReverseGraph{
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
int n = Integer.parseInt(scan.nextLine()); // number of vertices
//matrix of vertices
int[][] matrix = new int[n][n];
Scanner sc;
//create graph by input method(if A vertex associates with B vert than put "1" on B row, A column)
for(int i = 0; i < n;i++){
String line = scan.nextLine();
sc = new Scanner(line);
while(sc.hasNextInt()){
matrix[sc.nextInt() - 1][i] = 1;
}
}
scan.close();
//Begin write the input graph
System.out.println(n); //write num of vertices
//write
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++){
if(matrix[i][j] == 1)
System.out.print((j+1) + " ");
}
System.out.println();
}
}
}
答案 0 :(得分:0)
减少内存占用的选项。
作为ArrayList<int[]>
实现的邻接列表,其中int[]
是2个元素的数组,每个数组代表一个链接。
如上所述,除了使用带有两个int
字段的自定义类来表示链接。
作为HashMap<Integer, HashSet<Integer>>
或HashMap<Integer, HashSet<Integer>>
或HashMap<Integer, TreeSet<Integer>>
,其中每个集或列表代表链接的目的地。
使用Trove collection types等效于上述内容。
所有这些 1 对于链接数量O(L)
而不是数量O(N^2)
的节点。
1 - 除了使用TreeSet
...