• AcWing 847. 图中点的层次


    队列

    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    #include <queue>
    using namespace std;
    const int N = 100010;
    int n, m;
    int h[N], e[N], ne[N], idx;
    int d[N];
    void add(int a, int b) {
        e[idx] = b, ne[idx] = h[a], h[a] = idx ++ ;
    }
    int bfs() {
        memset(d, -1, sizeof d);
        queue<int> q;
        d[1] = 0;
        q.push(1);
        while (q.size()) {//当队列不空 
            int t = q.front();//取得队头 
            q.pop();
            for (int i = h[t]; i != -1; i = ne[i]) {
                int j = e[i];//j扩展 
                if (d[j] == -1) {//如果没有被遍历过 
                    d[j] = d[t] + 1;//扩展 
                    q.push(j);//插入 
                }
            }
        }
        return d[n];
    }
    int main() {
        scanf("%d%d", &n, &m);
        memset(h, -1, sizeof h);
        for (int i = 0; i < m; i ++ ) {
            int a, b;
            scanf("%d%d", &a, &b);
            add(a, b);
        }
        cout << bfs() << endl;
        return 0;
    }

    模拟队列

    #include<bits/stdc++.h>
    using namespace std ;
    const int N=100010;
    int n,m;
    int h[N],e[N],ne[N],idx;
    int d[N],q[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()<<endl;
    }
  • 相关阅读:
    UWP xaml 圆形头像
    Win10 UWP xaml 延迟加载元素
    Win10 UWP xaml 延迟加载元素
    Win10 UWP xaml 延迟加载元素
    C# 6.0 $"Hello {csdn}"
    C# 6.0 $"Hello {csdn}"
    C# 6.0 $"Hello {csdn}"
    多个code.csdn.net账号切换
    多个code.csdn.net账号切换
    多个code.csdn.net账号切换
  • 原文地址:https://www.cnblogs.com/QingyuYYYYY/p/11831952.html
Copyright © 2020-2023  润新知