@Override
  public Collection<Edge> getEdges() {
    Collection<Edge> set = new LinkedList<>();

    if (digraph) {
      for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
          if (graph[i][j] != 0.0) {
            Edge edge = new Edge();
            edge.v1 = i;
            edge.v2 = j;
            edge.weight = graph[i][j];
            set.add(edge);
          }
        }
      }
    } else {
      for (int i = 0; i < n; i++) {
        for (int j = i; j < n; j++) {
          if (graph[i][j] != 0.0) {
            Edge edge = new Edge();
            edge.v1 = i;
            edge.v2 = j;
            edge.weight = graph[i][j];
            set.add(edge);
          }
        }
      }
    }

    return set;
  }
  @Override
  public Edge getEdge(int source, int target) {
    if (graph[source][target] == 0.0) {
      return null;
    }

    Edge edge = new Edge();
    edge.v1 = source;
    edge.v2 = target;
    edge.weight = graph[source][target];
    return edge;
  }
 @Override
 public Collection<Edge> getEdges(int vertex) {
   Collection<Edge> set = new LinkedList<>();
   for (int j = 0; j < n; j++) {
     if (graph[vertex][j] != 0.0) {
       Edge edge = new Edge();
       edge.v1 = vertex;
       edge.v2 = j;
       edge.weight = graph[vertex][j];
       set.add(edge);
     }
   }
   return set;
 }