Friday 4 October 2013

Adjacency List Implementation

/*
 * Demo Vertex class contains only vertexId.
 * Can be extended to keep other details.
 */
public class Vertex {
     int vertexId;
     ArrayList<Edge> edges ;
     
     public Vertex(int id) {
          vertexId = id;
          edges = new ArrayList<>();
     }
     
     public void addEdge(Edge e) {
          edges.add(e);
     }
}




public class Edge {
     Vertex Target;
     int weight;
     
     public Edge(Vertex Target, int weight) {
          this.Target = Target;
          this.weight = weight;
     }
}



public class Graph {
     /*
      * @vertices, ArrayList of all vertices in a graph.
      * @directed, boolean variable to store if graph is directed/undirected
      * @totalVertices, Total number of vertices in a graph.
      */
     Vertex vertices[];
     boolean directed;
     int totalVertices;
     
     /*
      * @param directed , boolean variable to keep if graph is directed.
      * @param totalVertices, total number of vertices in a graph.
      */
     public Graph(int totalVertices, boolean directed) {
          this.totalVertices = totalVertices;
          this.directed = directed;
          vertices = new Vertex[totalVertices];
          for(int i=0; i<totalVertices; i++)
               vertices[i] = null;
     }
     
     /*
      * @param target @param source, check if source and target vertex already present (!=null).
      * if source/target vertex not present in graph then create it.
      * Else add weighted edge from source to target vertex.
      */
     public void addVertex(int source, int target, int weight) {
          if(vertices[source] == null) {
               vertices[source] = new Vertex(source);
          }
          if(vertices[target] == null) {
               vertices[target] = new Vertex(target);
          }
          
          Vertex sourceVertex = vertices[source];
          Vertex targetVertex = vertices[target];
          sourceVertex.addEdge(new Edge(targetVertex,weight));
          if(!directed) {
               targetVertex.addEdge(new Edge(sourceVertex,weight));
          }
        }
}

1 comment:

  1. King Caesar Casino Review 2021 - Shootercasino
    Our review will 메리트 카지노 주소 describe King Caesar Casino, 인카지노 an 제왕카지노 online casino, poker room, sportsbook, gaming, and more. Claim your bonus now!

    ReplyDelete