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.ArrayList;
import java.util.Collections;
import java.util.PriorityQueue;
import java.util.Scanner;

class adj_list implements Comparable<adj_list>{
    public int u,k,d;
    public int[] v;
    public boolean find_flg = false;
    public int compareTo (adj_list a){return this.u - a.u;}
}

public class Main {

    private static ArrayList<adj_list>  ar = new ArrayList<adj_list>();

    private static final int U          =  0,
                             K          =  1,
                             UNREARCHED = -1,
                             START      =  1,
                             S          =  0;

    public static void main(String[] args) {

        //input
         Scanner sc = new Scanner(System.in).useDelimiter(System.getProperty("line.separator"));
         int      N = sc.nextInt();

         adj_list a;String[] s;
         for(int i = 0;i < N;i++){
             s = sc.next().split("\\s");
             a = new adj_list();
             a.u = Integer.parseInt(s[U]);
             a.k = Integer.parseInt(s[K]);
             a.v = new int[a.k];
             for(int j=0;j<a.k;j++){a.v[j] = Integer.parseInt(s[j+2]);}
             a.d = UNREARCHED;
             ar.add(a);
         }
         Collections.sort(ar);

         //calculation
       	 BFS();

         //output
         for (adj_list d:ar) {System.out.println(d.u + " " + d.d);}
    }

    private static void BFS(){
    	PriorityQueue<adj_list> q = new PriorityQueue<adj_list>();
    	adj_list s = get_list(START);
    	s.d = S;
    	s.find_flg = true;
    	q.add(s);

    	while(!q.isEmpty()){
    		adj_list u = q.poll();
    		for(int v:u.v){
    			adj_list a = get_list(v);
    			if(a.find_flg){continue;}
    			a.d = u.d+1;
    			a.find_flg = true;
    			q.add(a);
    		}
    	}
    }

    private static adj_list get_list(int id){
        adj_list ret = null;
        for(adj_list a:ar){if(a.u == id){ret = a;}}
        return ret;
    }
}