Я ищу способ избежать создания дубликатов в моем орграфе (я использую библиотеку jgrapht).
Я прочитал некоторые темы, в которых говорилось об использовании: directedGraph.setCloneable(false);
Но это не похоже на то, что я не могу найти его в документации библиотеки, и я получаю сообщение об ошибке в этой строке, говорящее, что оно не существует.
Я создал свой график, используя:
public static DirectedGraph<Point, DefaultEdge> directedGraph = new DefaultDirectedGraph<Point, DefaultEdge>(DefaultEdge.class);
А затем он добавляет к нему вершины на основе алгоритма заливки (добавляет вершины и ребра по мере того, как алгоритм проходит через каждую точку, ниже приведена его часть):
// Up
xToFillNext = x-1;
yToFillNext = y;
if (xToFillNext==targetX && yToFillNext==targetY && !forbiddenDirection.equals(Direction.UP)) {
Point myPoint = new Point(x, y);
Point myNextPoint = new Point(xToFillNext, yToFillNext);
directedGraph.addVertex(myPoint);
directedGraph.addVertex(myNextPoint);
directedGraph.addEdge(myPoint, myNextPoint);
return true;
} else if (xToFillNext>=0 && originValue==matrix[xToFillNext][yToFillNext] && !forbiddenDirection.equals(Direction.UP)) {
Point myPoint = new Point(x, y);
Point myNextPoint = new Point(xToFillNext, yToFillNext);
directedGraph.addVertex(myPoint);
directedGraph.addVertex(myNextPoint);
directedGraph.addEdge(myPoint, myNextPoint);
fillingReachedTargetPosition =
fillReachesTargetPosition(matrix, xToFillNext, yToFillNext, targetX, targetY, fillValue, Direction.DOWN );
if (fillingReachedTargetPosition) {
return true;
}
}
Но когда я печатаю список вершин, есть дубликаты, от которых мне нужно либо избавиться, либо избежать их создания. Есть ли способ сделать это?
РЕДАКТИРОВАТЬ: я создал класс Point:
public static class Point {
public int x;
public int y;
public Point(int x, int y)
{
this.x = x;
this.y = y;
}
@Override
public String toString() {
return ("[x="+x+" y="+y+"]");
}
}