zoukankan      html  css  js  c++  java
  • 847. 图中点的层次

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

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

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

    输入格式

    第一行包含两个整数n和m。

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

    输出格式

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

    数据范围

    1n,m1051≤n,m≤105

    输入样例:

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

    输出样例:

    1

    #include<iostream>
    #include<cstring>
    #include<algorithm>
    
    using namespace std;
    
    const int N = 1e5 + 10;
    
    int n,m;
    int h[N],ne[N],e[N],idx;
    //d是距离q是队列
    int d[N],q[N];
    
    void add(int a,int b){
        e[idx] = b;
        ne[idx] = h[a];
        h[a] = idx ++;
    }
    
    int bfs(){
        int tt = 0,hh = 0;//队头队尾
        
        //第一个元素就是我们的起点1
        q[0] = 1;
        
        //初始化距离
        memset(d,-1,sizeof d);
        
        //一开始只有第一个元素被遍历过了
        d[1] = 0;
        
        //宽搜框架
        /*
        1.队列不空
        2.取得队头
        3.扩展当前这个点
        4.用j表示当前可以到达的这个点
        5.判断是否被扩展到j这个点,如果没有被扩展到就扩展下 d[j] = d[t] + 1;
        6.并且把j这个点加到我们的队列里边去
        7.返回最小距离
        */
        while(tt >= hh){
            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() << endl;
        
        return 0;
        
    }
    

      

  • 相关阅读:
    Spring Cloud Eureka的学习
    Maven环境配置
    Maven解决静态资源过滤问题
    Linux Desktop Entry文件配置解析
    iptables规则持久化
    Markdown学习总结
    输vim /etc/rc.d/init.d/mysqld 报错 …..localdomain.pid
    UE4 集成讯飞听写插件
    单机梦幻西游
    使用A*寻路小记
  • 原文地址:https://www.cnblogs.com/luyuan-chen/p/11727057.html
Copyright © 2011-2022 走看看