19

So I need to take in input of edges of a bipartite graph like this:

6
1 3
1 2
1 5
2 7
2 4
2 9

The first number is the number of edges. After that edges are listed. See how for example vertex 1 has multiple different edges and I want to keep track of what 1 is connected to, I was thinking that each vertex of the graph would have some sort of list of vertices it is connected to which leads me to try to create an array of linked lists but I'm not sure how I would do that. I tried

LinkedList<Integer>[] vertex = new LinkedList[5];
int i = 0, m = 6;
while(i!=m){
    int temp = sc.nextInt();
    int temp2 = sc.nextInt();
    vertex[temp].add(temp2);
    i++;
}

But I get a nullpointerexception at the add line.

3
  • 4
    You haven't initialized the elements in the array, only the array itself. Commented Nov 25, 2013 at 20:43
  • Did you think of creating classes like - Vertex, Edge? And have a List<Edge> in another class called Graph? Commented Nov 25, 2013 at 20:44
  • Also, arrays use 0-based indices which means that an array of size 5 has indices 0...4. Commented Nov 25, 2013 at 20:44

2 Answers 2

32
LinkedList<Integer>[] vertex = new LinkedList[5];
int i = 0, m = 6;
while(i!=m){
  int temp = sc.nextInt();
  int temp2 = sc.nextInt();

  // Make sure the list is initialized before adding to it
  if (vertex[temp] == null) {
     vertex[temp] = new LinkedList<Integer>();
  }

  vertex[temp].add(temp2);
  i++;
}
Sign up to request clarification or add additional context in comments.

3 Comments

LinkedList<Integer>[] vertex = new LinkedList[5]; Why do I get the following warning when I do the above? How to mitigate this? Type safety: The expression of type LinkedList[] needs unchecked conversion to conform to LinkedList<Integer>[]
@jaamit @SuppressWarnings("unchecked") LinkedList<Integer>[] vertex = new LinkedList[5]; worked for me.
@ShubhamMittal @SuppressWarnings("unchecked") this will suppress the warning. I am more interested in knowing why the warning came in the first place.
8
//initialize array
LinkedList<Integer>[] vertex = new LinkedList[5];
//initialize array elements(objects of LinkedList)
for (int j=0; j<5; j++)
    vertex[i]=new LinkedList<Integer>();

int i = 0, m = 6;
while(i!=m){
    int temp = sc.nextInt();
    int temp2 = sc.nextInt();
    vertex[temp].add(temp2);
    i++;
}

Normally Arrays are not encouraged in Java. Alternatively you can use this:

//initialize array
List<LinkedList<Integer>> vertex = new ArrayList<LinkedList<Integer>>();
//initialize arraylist elements(objects of LinkedList)
for (int j=0; j<5; j++)
    vertex.add(new LinkedList<Integer>());

1 Comment

vertex[i]=new LinkedList<Integer>(); it should be--> vertex[j]=new LinkedList<Integer>();

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.