示例#1
0
  /**
   * Method testEulerian to check if the given graph is Eulerian or not. A Eulerian graph is
   * connected and the degree of each vertes is even. They have a cycle, that goes through every
   * edge of graph only once. A connected graph with exactly two vertices of odd degree has Eulerian
   * Path.
   *
   * @param g: Input graph which is to be tested for satisfying Eulerian conditions
   */
  static int testEulerian(Graph<Vertex> g) {
    Vertex v1 = null, v2 = null;
    int conn = dfsUtil(g);
    if (conn > 1) {
      System.out.println("The graph is not connected.");
      System.exit(0);
    }

    int odd = 0;

    for (Vertex u : g) {
      if (u.Adj.size() % 2 != 0) {
        odd++;
        if (odd == 1) {
          v1 = u;
        } else if (odd == 2) {
          v2 = u;
        }
      }
    }
    if (odd == 0) {
      return 2;
    } else if (odd == 2) {
      System.out.println(v1 + " and " + v2);
      return 1;
    } else return 0;
  }
示例#2
0
 /**
  * Method to add an edge to the graph
  *
  * @param a : int - one end of edge
  * @param b : int - other end of edge
  * @param weight : int - the weight of the edge
  */
 void addEdge(int a, int b, int weight) {
   Vertex u = verts.get(a);
   Vertex v = verts.get(b);
   Edge e = new Edge(u, v, weight);
   u.Adj.add(e);
   v.Adj.add(e);
   u.Degree++;
   v.Degree++;
   u.remDegree++;
   v.remDegree++;
 }