847. 圖中點的層次

給定一個n個點m條邊的有向圖,圖中可能存在重邊和自環。java

全部邊的長度都是1,點的編號爲1~n。數組

請你求出1號點到n號點的最短距離,若是從1號點沒法走到n號點,輸出-1。ui

輸入格式

第一行包含兩個整數n和m。this

接下來m行,每行包含兩個整數a和b,表示存在一條從a走到b的長度爲1的邊。spa

輸出格式

輸出一個整數,表示1號點到n號點的最短距離。code

數據範圍

1n,m10^1≤n,m≤10^5xml

輸入樣例:

4 5
1 2
2 3
3 4
1 3
1 4

輸出樣例:

首先數據範圍10^5,因此鄰接表

代碼:
import java.util.ArrayDeque;
import java.util.Arrays;
import java.util.Scanner;
class Node{
        int x;
        int step;
        public Node(int x,int step){
                this.x=x; this.step=step;
        }
}
public class Main{
        static final int N=100005;
        static int n,m;
        static int e[]=new int[N];
        static int ne[]=new int[N];
        static int h[]=new int[N];
        static boolean vis[]=new boolean[N];//vis標記,防止重邊和自環
        static int idx;
        static ArrayDeque<Node> q=new ArrayDeque<Node>();
        static void add(int a,int b){
                e[idx]=b;
                ne[idx]=h[a];
                h[a]=idx++;
        }
        static int bfs(){
                vis[1]=true;
                q.offer(new Node(1,0));
                while(!q.isEmpty()){
                        Node t=q.poll();
                         if(t.x==n)  return t.step;
                        for(int i=h[t.x];i!=-1;i=ne[i]){
                                int j=e[i];//e數組用來保存數據
                                if(!vis[j]){
                                        q.offer(new Node(j,t.step+1));
                                        vis[j]=true;
                                }
                        }
                }
                return -1;
        }
        public static void main(String[] args) {
                Scanner scan=new Scanner(System.in);
                n=scan.nextInt();
                m=scan.nextInt();
                Arrays.fill(h, -1);
                while(m-->0){
                        int a=scan.nextInt();
                        int b=scan.nextInt();
                        add(a,b);
                }
                System.out.println(bfs());
        }
        
}
相關文章
相關標籤/搜索