用Java实现图形

用Java实现图形,java,graph,depth-first-search,breadth-first-search,Java,Graph,Depth First Search,Breadth First Search,我被指派了一项任务,用java实现一个图形。它最终将用于测试搜索方法(广度优先、深度优先和迭代深化)。要创建的三个类必须实现三个相应的接口: public interface Node { public Node createNode(String name, int ID, float weight); public Node[] getNeighbours(); public Edge[] getEdges(); public void addEdge(Edg

我被指派了一项任务,用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();
公共接口节点{
公共节点createNode(字符串名称、int-ID、浮动权重);
公共节点[]获取邻居();
公共边缘[]获取边缘();
公共无效补遗(边缘e);
公共无效清除(边缘e);
公共字符串getName();
public int getID();
公共浮点数getWeight();
公共字符串toString();
公共接口边缘{
公共边缘createEdge(字符串名称、整数ID、浮动权重);
公共节点getStartNode();
公共节点(节点n);
公共节点getEndNode();
公共void setEndNode(节点n);
公共字符串getName();
public int getID();
公共浮点数getWeight();
公共字符串toString();
公共接口图{
公共图createGraph(字符串名称、int ID、节点[]节点、边[]边、节点根);
公共字符串getName();
公共边缘[]获取边缘();
公共无效补遗(边缘e);
公共边缘getEdge(字符串名称,int-ID);
公共无效清除(边缘e);
公共节点[]获取节点();
公共void addNode(节点n);
公共节点getNode(字符串名称,int-ID);
公共void removeNode(节点n);
公共void setRoot(节点n);
公共节点getRoot();

公共布尔isTree();接口无法定义构造函数。有关一些讨论,请参阅


请参阅,以了解可能会引导您走向正确方向的简短讨论。

我同意您对在接口中放置create方法是否明智的质疑。接口中的方法必须在实现类中作为实例方法实现,通常这样的方法在替代构造函数时是class方法,即静态工厂方法,不能出现在接口中

在Java接口中使用创建方法的唯一原因是如果有人正在进行克隆,这里的情况似乎不是这样。当您实现这些接口时,创建方法将调用您的构造函数(您可以自由地以任何方式实现构造函数),但这些方法有点愚蠢,因为作为实例方法,您需要有现有的对象来调用它们


至于你的第二个问题,邻接矩阵、邻接列表或关联列表的选择完全取决于你。

我看到这里的投票结果非常接近。也许将你的问题重新命名为“Java接口中奇怪的构造函数类方法”会使它更具吸引力。只是一个想法。