zoukankan      html  css  js  c++  java
  • #BFS #树与图的广度优先遍历 ~20.8.12

    例题: AcWing 847. 图中点的层次

    给定一个n个点m条边的有向图,图中可能存在重边和自环。

    所有边的长度都是1,点的编号为1~n。

    请你求出1号点到n号点的最短距离,如果从1号点无法走到n号点,输出-1。

    输入格式
    第一行包含两个整数n和m。

    接下来m行,每行包含两个整数a和b,表示存在一条从a走到b的长度为1的边。

    输出格式
    输出一个整数,表示1号点到n号点的最短距离。

    数据范围
    1≤n,m≤105
    输入样例:
    4 5
    1 2
    2 3
    3 4
    1 3
    1 4
    输出样例:
    1

    #include<bits/stdc++.h>
    using namespace std;
    const int N = 100010;
    int n, m, idx = 0;
    int ne[N], e[N], h[N], q[N], d[N];
    
    void add(int a, int b){
        e[idx] = b, ne[idx] = h[a], h[a] = idx ++;
    }
    int bfs(){
        int hh = 0, tt = 0;
        q[0] = 1;
        memset(d, -1, sizeof d);
        d[1] = 0;
        while(hh <= tt){
            int t = q[hh ++];
            for(int i = h[t]; i != -1; i = ne[i]){
                int j = e[i];
                if(d[j] == -1){
                    d[j] = d[t] + 1;
                    q[++ tt] = j;
                }
            }
        }
        return d[n];
    }
    int main(){
        cin >> n >> m;
        memset(h, -1, sizeof h);
        for(int i = 0; i < m;i ++){
            int a, b;
            cin >> a >> b;
            add(a, b);
        }
        cout << bfs() ;
        return 0;
    }
    
    
  • 相关阅读:
    Lucene.Net
    授权
    测试
    Upgrade ASP.NET 1.1 To ASP.NET 2.0 Cookie
    Highlight
    缓存
    base
    System.Environment.UserDomainName 为什么不返回 当前的 Domainname
    英语骂人一百句
    比较动态调用代码
  • 原文地址:https://www.cnblogs.com/yuanyulin/p/14026752.html
Copyright © 2011-2022 走看看