Problem:
MathJax.Hub.Config({ tex2jax: { inlineMath: [["$","$"], ["\\(","\\)"]], processEscapes: true }});

Breadth First Search

Write a program which reads an directed graph $G = (V, E)$, and finds the shortest distance from vertex $1$ to each vertex (the number of edges in the shortest path). Vertices are identified by IDs $1, 2, ... n$.

Input

In the first line, an integer $n$ denoting the number of vertices, is given. In the next $n$ lines, adjacent lists of vertex $u$ are given in the following format:

$u$ $k$ $v_1$ $v_2$ ... $v_k$

$u$ is ID of the vertex and $k$ denotes its degree.$v_i$ are IDs of vertices adjacent to $u$.

Constraints

$1 \leq n \leq 100$

Output

For each vertex $u$, print $id$ and $d$ in a line. $id$ is ID of vertex $u$ and $d$ is the distance from vertex $1$ to vertex $u$. If there are no path from vertex $1$ to vertex $u$, print -1 as the shortest distance. Print in order of IDs.

Sample Input 1

4
1 2 2 4
2 1 4
3 0
4 1 3

Sample Output 1

1 0
2 1
3 2
4 1

Reference

Introduction to Algorithms, Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein. The MIT Press.

Solution in JAVA (judge verdict: Wrong Answer)

import java.util.LinkedList;
import java.util.Scanner;


public class Main{

	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		int cnt = Integer.parseInt(s.nextLine());
		int[][] input = new int[cnt][cnt+2];
		for(int i=0 ; i<cnt ; i++) {
			String[] tmp = s.nextLine().split(" ");
			int[] a = new int[tmp.length];
			for(int j=0 ; j<a.length ; j++) {
				a[j] = Integer.parseInt(tmp[j]);
			}
			input[i] = a;
		}
		int[] result = bfs(input);
		for(int i=0 ; i<result.length ; i++) {
			System.out.println((i+1) + " " + result[i]);
		}
	}

	public static int[] bfs(int[][] input) {
		int[] result = new int[input.length];
		boolean[] alreadyVisit = new boolean[input.length];
		for(int i=0 ; i<result.length ; i++) {
			result[i] = -1;
			alreadyVisit[i] = false;
		}
		LinkedList<Integer> graph = new LinkedList<Integer>();
		LinkedList<Integer> shortPath = new LinkedList<Integer>();
		graph.offer(new Integer(1));
		shortPath.offer(new Integer(0));

		while(! graph.isEmpty()) {
			Integer g = (Integer) graph.poll();
			Integer s = (Integer) shortPath.poll();
			if(alreadyVisit[g.intValue()-1])
				break;
			alreadyVisit[g.intValue()-1] = true;
			if(result[g.intValue()-1]==-1)
				result[g.intValue()-1] = s.intValue();
			for(int i=0 ; i<input[g.intValue()-1][1] ; i++) {
				graph.offer(new Integer(input[g.intValue()-1][i+2]));
				shortPath.offer(new Integer(s.intValue()+1));
			}
		}
		return result;
	}
}