Реализация графа в Java - PullRequest
       85

Реализация графа в Java

1 голос
/ 30 октября 2011

Мне дали задание реализовать граф в Java.В конечном итоге он будет использоваться для тестирования методов поиска (сначала ширина, глубина и итеративное углубление).Три класса, которые должны быть созданы, должны реализовать три соответствующих интерфейса:

public interface Node {
    public Node createNode(String name, int ID, float weight);
    public Node[] getNeighbours();
    public Edge[] getEdges();
    public void addEdge(Edge e);
    public void removeEdge(Edge e);
    public String getName();
    public int getID();
    public float getWeight();
    public String toString();

public interface Edge {
    public Edge createEdge(String name, int ID, float weight);
    public Node getStartNode();
    public void setStartNode(Node n);
    public Node getEndNode();
    public void setEndNode(Node n);
    public String getName();
    public int getID();
    public float getWeight();
    public String toString();

public interface Graph {
    public Graph createGraph(String name, int ID, Node[] nodes, Edge[] edges, Node root);
    public String getName();
    public Edge[] getEdges();
    public void addEdge(Edge e);
    public Edge getEdge(String name, int ID);
    public void removeEdge(Edge e);
    public Node[] getNodes();
    public void addNode(Node n);
    public Node getNode(String name, int ID);
    public void removeNode(Node n);
    public void setRoot(Node n);
    public Node getRoot();  
    public boolean isTree();        <= optional!
    public String toString();

Основной метод будет в классе графа.

Я немного сбит с толку относительно того, почему существует createметоды для каждого класса, а не конструкторы.

Также кто-нибудь может посоветовать, следует ли мне хранить ребра с использованием матрицы смежности или списка смежностей?

Любая помощь будет принята с благодарностью.

Спасибо

Ответы [ 2 ]

2 голосов
/ 30 октября 2011

Я с вами на вопрос о целесообразности размещения методов создания в интерфейсе.Методы в интерфейсе должны быть реализованы как методы экземпляра в реализующих классах, и обычно такие методы, когда они используются вместо конструкторов, являются class методами, а именно статические фабричные методы , которые не могут появляться в интерфейсах.

Единственная причина иметь метод создания в интерфейсе Java - это если клонирование выполняется, что здесь не так.Когда вы реализуете эти интерфейсы, методы создания будут вызывать ваш конструктор (который вы можете реализовать любым удобным для вас способом), но эти методы довольно глупы, потому что в качестве методов экземпляра вам понадобятся существующие объекты, для которых они будут вызываться..

Что касается вашего второго вопроса, выбор матрицы смежности, списка смежности или списка инцидентов полностью зависит от вас.

1 голос
/ 30 октября 2011

Интерфейсы не могут определять конструкторы. Для обсуждения см. эту вики-страницу .

См. Страницу в Википедии о компромиссах в списке смежности для краткого обсуждения, которое может привести вас в правильном направлении.

...