C++ 树与图的广度优先遍历 || 模版题 :图中点的层次

news/2024/6/29 11:50:15 标签: c++, 宽度优先, 算法

给定一个 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 <iostream>
#include <cstring>
using namespace std;

const int N = 10010;

int n, m;
int h[N], e[N], ne[N], idx; //邻接表
int d[N], q[N]; //d是距离,q是队列

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; //第一个元素是起点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;
    
    return 0;
    
}

http://www.niftyadmin.cn/n/5327220.html

相关文章

探索自动化测试断言:提升测试效率与质量的关键!

前言 断言在自动化测试中起着关键的作用&#xff0c;它是验证测试结果是否符合预期的重要手段。如果在自动化测试过程中忽视了断言&#xff0c;那么这个测试就失去了其本质的意义&#xff0c;因为我们无法得知测试结果是否达到了预期的效果。因此&#xff0c;断言在自动化测试…

统计学-R语言-4.1

文章目录 前言编写R函数图形的控制和布局par函数layout函数 练习 前言 安装完R软件之后就可以对其进行代码的编写了。 编写R函数 如果对数据分析有些特殊需要&#xff0c;已有的R包或函数不能满足&#xff0c;可以在R中编写自己的函数。函数的定义格式如下所示&#xff1a; …

Git的简单使用说明

Git入门教程 git的最主要的作用&#xff1a;版本控制&#xff0c;协助开发 一.版本控制分类 ​​ 1.本地版本控制 ​​ 2.集中版本控制 ​​ 所有的版本数据都存在服务器上&#xff0c;用户的本地只有自己以前所同步的版本&#xff0c;如果不连网的话&#xff0c;用户就看不…

车厢重组#洛谷

题目描述 在一个旧式的火车站旁边有一座桥&#xff0c;其桥面可以绕河中心的桥墩水平旋转。一个车站的职工发现桥的长度最多能容纳两节车厢&#xff0c;如果将桥旋转 180 180 180 度&#xff0c;则可以把相邻两节车厢的位置交换&#xff0c;用这种方法可以重新排列车厢的顺序…

【cuda】三、矩阵相乘与coalescing writes(合并写操作)

Matrix Multiplication and Optimization 线程块 功能 并行执行&#xff1a;线程块是一组同时执行的线程。它们共同执行分配给它们的任务资源共享&#xff1a;线程块内的线程可以共享数据和同步执行。通过共享内存&#xff08;Shared Memory&#xff09;和同步原语&#xff…

webpack之输出(output)

可以通过配置 output 选项&#xff0c;告知 webpack 如何向硬盘写入编译文件。注意&#xff0c;即使可以存在多个 entry 起点&#xff0c;但只能指定一个 output 配置。 用法 在 webpack 配置中&#xff0c;output 属性的最低要求是&#xff0c;将它的值设置为一个对象&#…

C# Cad2016二次开发选择文本信息导出(六)

//选文本信息导出 [CommandMethod("getdata")] public void getdata() {// 获取当前文档和数据库Document doc Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;Database db doc.Database;Editor ed doc.Editor;// 获取当前…

C++|29.纯虚函数/接口(待完成)

纯虚函数是一种特殊的虚函数。 普通的虚函数允许子类的同名函数对其进行重写&#xff0c;同时普通的虚函数本身是可以单独进行使用的。 而纯虚函数是一个空壳&#xff0c;强制要求所派生的类在继承的过程中必要将该虚函数进行实现。 如上图&#xff0c;纯虚函数只需要在vir…