我有一个文件,其中包含以下数据:
4
5
0 2
0 1 0.6
0 2 0.2
0 3 0.5
1 3 0.8
2 3 0.3
第一行是节点数,第二行是边数,第三行包含了拥有特殊约束的节点。
然而,我使用以下代码将其从文件中读取到两个列表values和nodes中,其中values列表包含边(例如:0 1 0.6),而nodes列表则分别包含第三行的值(4, 5, {0,2})。
我需要构建两个数组,一个等效于邻接矩阵,它长这样:
int graph[][] = {
{0, 6, 2, 5},
{6, 0, 0, 8},
{2, 0, 0, 3},
{5, 8, 3, 0}
};
另一个数组是特殊节点的ID,即:
int special [] ={0,2};
我可以从文件中读取数值,并将它们分别放在两个列表nodes和values中,如下所示:
nodes列表包含:4,5,0,2 values列表包含:0,1,0.6,0,2,0.2,0,3,0.5,1,3,0.8,2,3,0.3我声明了一个叫做graph2的二维数组来保存来自这些列表的值。但问题是我无法找到关系以便将数据从values列表填充到适合graph2 2d数组中。它必须像graph数组一样,但其初始化需要动态地从该文件中进行。
因此,基本上我需要创建两个数组:一个像graph数组(2d数组),另一个像special数组(1d)。根据该文件,我必须这样做。提前感谢您。
我的代码:
List<Double> values = new ArrayList<>();
List<Integer> nodes = new ArrayList<>();
int c = 0;
File file = new File("text.txt");
BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader(file));
String text = null;
while ((text = reader.readLine()) != null) {
if (c <= 2) {
String[] str = text.split(" ");
for (int i = 0; i < str.length; i++) {
if (str[i].trim().length() > 0) {
nodes.add(Integer.parseInt(str[i]));
}
}
c++;
} else {
String[] str = text.split(" ");
for (int i = 0; i < str.length; i++) {
if (str[i].trim().length() > 0) {
values.add(Double.parseDouble(str[i]));
}
}
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (reader != null) {
reader.close();
}
} catch (IOException e) {
System.out.print(e);
}
}
double graph2 [] [] =new double [nodes.get(0)][nodes.get(0)];