【算法打卡day7(2026-02-12 周四)算法:BFS and BFS】 3_卡码网107_寻找存在的路线_并查集

- 第 169 篇 -
Date: 2026 - 02- 13 | 周五
Author: 郑龙浩(仟墨)

算法:图论 - 并查集

文章目录

2026-02-13 周五 | 算法打卡 day8

3_卡码网107_寻找存在的路线_并查集

题目描述

给定一个包含 n 个节点的无向图中,节点编号从 1 到 n (含 1 和 n )。

你的任务是判断是否有一条从节点 source 出发到节点 destination 的路径存在。

输入描述

第一行包含两个正整数 N 和 M,N 代表节点的个数,M 代表边的个数。

后续 M 行,每行两个正整数 s 和 t,代表从节点 s 与节点 t 之间有一条边。

最后一行包含两个正整数,代表起始节点 source 和目标节点 destination。

输出描述

输出一个整数,代表是否存在从节点 source 到节点 destination 的路径。如果存在,输出 1;否则,输出 0。

输入示例

复制代码
5 4
1 2
1 3
2 4
3 4
1 4

输出示例

复制代码
1

数据范围:

1 <= M, N <= 100。

cpp 复制代码
// 3_卡码网107_寻找存在的路线_并查集.cpp
// Date: 2026-02-12 周四 Author:郑龙浩
// 算法:并查集 或者 DFS BFS

// 用时:

// 本题是个【无向图】,所以可以使用【并查集】,当然本题使用BFS和DFS也可以做出来,只是不如【并查集】方便简单
// 如果是个【有向图】,那么无法使用【并查集】,只能使用 BFS 或 DFS 了

// 思路,让在同一个连通图中的节点共享一个根节点,也就是这些节点全都指向一个根节点,然后如果两个节点指向的都是同一个根节点的话,那就是连同的
// 说白了就是让所有联通的节点加到同一个集合中  然后最后判断source和destination是否在同一个集合罢了
#include "bits/stdc++.h"
using namespace std;


const int N = 105; // 最大节点数
int father[N];

// 初始化
void init(int n) {
    for (int i = 1; i <= n; i++)
        father[i] = i;
}

// 查找某节点的根节点
int find(int x) {
    if (father[x] != x) // 如果x不是根节点,就去找到根节点,且将根节点存到father[x]
        father[x] = find(father[x]);

    return father[x];
}

// 将 x, y 放入同一个集合
void join(int x, int y) {
    int rootX = find(x);
    int rootY = find(y);
    if (rootX == rootY) // 如果x,y的根节点是相同的,那就是在统一集合,无需在join
        return;
    father[rootX] = rootY;
}

bool IsSame(int x, int y) {
    if (find(x) == find(y)) return true;
    return false;
}

int main(void) {
    ios::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);

    int n, m;
    cin >> n >> m;

    init(n); // 不要忘了初始化,刚开始我忘了

    int x, y;
    while (m--) {
        cin >> x >> y;
        join(x, y); // 不短将x,y放入同一个集合,让每一对都在不同的集合当中
    }

    int source, destination;
    cin >> source >> destination;
    if (IsSame(source, destination)) { // 如果是同一个根节点,就输出1
       cout << 1; 
    } else 
        cout << 0;
    return 0;
}
相关推荐
YuTaoShao1 小时前
【LeetCode 每日一题】3713. 最长的平衡子串 I ——(解法二)暴力枚举 + 优化
算法·leetcode·职场和发展
蜡笔小马1 小时前
20.Boost.Geometry 中常用空间算法详解:crosses、densify、difference 与离散距离度量
c++·算法·boost
rgb2gray2 小时前
优多元分层地理探测器模型(OMGD)研究
人工智能·算法·机器学习·回归·gwr
码农三叔2 小时前
《卷2:人形机器人的环境感知与多模态融合》
人工智能·嵌入式硬件·算法·机器人·人形机器人
数智工坊2 小时前
【数据结构-排序】8.2 冒泡排序-快速排序
数据结构
福大大架构师每日一题2 小时前
2026-01-15:下一个特殊回文数。用go语言,给定一个整数 n,求出一个比 n 更大的最小整数,该整数需要满足两条规则: 1. 它的十进制表示从左到右与从右到左完全一致(即读起来是对称的)。 2
python·算法·golang
努力进修2 小时前
算法刷题无边界!Hello-Algo+cpolar 随时随地想学就学
算法·cpolar
寻寻觅觅☆3 小时前
东华OJ-基础题-127-我素故我在(C++)
开发语言·c++·算法
ab1515173 小时前
2.13完成101、102、89
开发语言·c++·算法