Итак, я попробовал что-то вроде этого:
public static ArrayList<Multimap<Integer, Integer>> detectNode(ArrayList<Point> arrayList) {
ArrayList<Multimap<Integer,Integer>> allresults= new ArrayList<>();
for (int i = 0; i < arrayList.size(); i++) {
Multimap<Integer,Integer> key = ArrayListMultimap.create();
for (int j = 0; j < arrayList.size(); j++) {
Double d=distance(arrayList.get(i),arrayList.get(j));
if(d<5.0 && d!=0 && j>i) {
key.put(i,j);
}
}
if(!key.isEmpty()) {
allresults.add(key);
}
}
return allresults;
}
и я получаю это на главном:
[{25 = [28, 29, 33]}, {27 = [34, 35]}, {28 = [29]}, {31 = [32, 33]}, {32 = [33] }]
что почти нормально.
Единственное, чего сейчас не хватает, так это того, что если номер 33 принадлежит ключу 25, то 31 и 32 тоже принадлежат 25!
Я попробовал этот код ниже, проверив, не является ли значение ключом где-то еще и тот же результат:
[{25 = [28, 29, 33]}, {27 = [34, 35]}, {28 = [29]}, {31 = [32, 33]}, {32 = [33] }]
public static ArrayList<Multimap<Integer, Integer>> detectNode(ArrayList<Point> arrayList) {
ArrayList<Multimap<Integer,Integer>> allresults= new ArrayList<>();
for (int i = 0; i < arrayList.size(); i++) {
Multimap<Integer,Integer> key = ArrayListMultimap.create();
for (int j = 0; j < arrayList.size(); j++) {
Double d=distance(arrayList.get(i),arrayList.get(j));
if(d<5.0 && d!=0 && j>i) {
if(allresults.isEmpty()) {
key.put(i,j);
}
for (int k = 0; k < allresults.size(); k++) {
if(!allresults.get(k).containsKey(j) && !allresults.get(k).containsEntry(i,j)) {
key.put(i,j);
break;
}
}
}
}
if(!key.isEmpty()) {
allresults.add(key);
}
}
return allresults;
}