求助TAT(图的宽搜)
  • 板块学术版
  • 楼主ww4445
  • 当前回复7
  • 已保存回复7
  • 发布时间2021/6/23 03:29
  • 上次更新2023/11/4 21:35:54
查看原帖
求助TAT(图的宽搜)
406728
ww4445楼主2021/6/23 03:29

(是别人整理的题单中的题, 洛谷好像没有原题(。_。))

#include <iostream>
#include <queue>
#include <cstring>
using namespace std;

const int N = 1e5 +10;
int n, m, idx = 1;
int h[N], e[N], ne[N], di[N];

void setE(int a, int b)
{
    e[idx] = b, ne[a] = h[a], h[a] = idx ++;
}

int bfs()
{
    queue<int> q;
    q.push(1);
    di[1] = 0;

    while(! q.empty())
    {
        int qf = q.front();
        q.pop();

        for(int i = h[qf]; i != 0; i = ne[i])
        {
            int j = e[i];
            if(di[j] == -1)
            {
                di[j] = di[qf] + 1;
                q.push(j);
            }
        }
    }
    return di[n];
}

int main() {
    cin >> n >> m;
    memset(di, -1, sizeof di);

    while(m --)
    {
        int a, b;
        cin >> a >> b;
        setE(a, b);
    }

    cout << bfs() << endl;
}
2021/6/23 03:29
加载中...