无向图的路径判断

题目描述

现有一个由1,2,3,4...,n个点,m条边组成的无向图。请判断给定的t组数据x, y(x表示起点,y表示终点),针对每组数据是否存在一条通路,如果存在则输出Yes,否则输出No

输入

第1行:n m t (n、m、t使用空格隔开,其中n表示结点的数量,结点由1开始编号;m表示边的数量;t表示待判断的起点、终点有多少对。2<=n、m、t<=10002<=n、m、t<=1000)
接下来的m行,每行一对整数a b,a、b使用空格隔开,表示结点a与结点b之间存在一条边
接下来的t行,每行一对整数x y, x、y使用空格隔开,如果结点x与结点y之间存在一条通路则输出Yes,否则输出No;每行一个。

输出

如果指定的起点与终点之间存在一条通路则输出Yes,否则输出No,每行一个

样例输入

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

样例输出

Yes
Yes
No
No

思路

这道题BFS和DFS都可以解答,DFS更为简单,但可能TLE,BFS更为快速,也比较好理解。

这道题不需要设置sx,sy方位值,只需要一个队列即可做到,

for (int i = 0; i < edge[u].size(); i++) {
            int to = edge[u][i];
            if (vis[to] == 0) {
                vis[to] = 1;
                que.push(to);
            }
}

edge在上方定义为vector edge[1005],是一个不定数组,vis是一个存储使用状态的一个一维数组。

代码

#include <bits/stdc++.h>
using namespace std;
vector<int> edge[1005];
int n, m, t;
queue<int> que;
int vis[1005], mp[1005][1005];

void bfs(int st)
{
    memset(vis, 0, sizeof(vis));
    que.push(st);
    vis[st] = 1;
    while (que.size()) {
        int u = que.front();
        que.pop();
        mp[st][u] = mp[u][st] = 1;
        for (int i = 0; i < edge[u].size(); i++) {
            int to = edge[u][i];
            if (vis[to] == 0) {
                vis[to] = 1;
                que.push(to);
            }
        }
    }
    return;
}

int main()
{
    cin >> n >> m >> t;
    for (int i = 1; i <= m; i++) {
        int u, v;
        cin >> u >> v;
        edge[u].push_back(v);
        edge[v].push_back(u);
    }
    for (int i = 1; i <= n; i++) {
        bfs(i);
    }
    for (int i = 1; i <= t; i++) {
        int u, v;
        cin >> u >> v;
        if (mp[u][v] == 1)
            cout << "Yes" << endl;
        else
            cout << "No" << endl;
    }
    return 0;
}

小编蒟蒻一个,有什么问题请大佬不惜赐教Orz

posted @   骆美辰  阅读(103)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
  1. 1 淋雨一直走 张韶涵
  2. 2 一期一会《未闻花名》(Cover 茅野愛衣,戸松遥,早見沙織) 周深
  3. 3 起风了 吴青峰
  4. 4 极恶都市 夏日入侵企划
淋雨一直走 - 张韶涵
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

作词 : 姚若龙

作曲 : Henrik Tala/Hermanni Kovalainen/Ilanguaq Lumholt

编曲 : DJ Mobster Productions

制作人 : Jae Chong

Oh~ 人都应该有梦

有梦就别怕痛

有雷声在轰不停

雨泼进眼里看不清

谁急速狂飙

溅我一身 的泥泞

很确定我想去哪里

往天堂要跳过地狱

也不恐惧

不逃避

这不是脾气

这不是脾气

是所谓志气 与勇气

你能推我下悬崖

我能学会飞行

从不听

谁的命令

很独立

耳朵用来听自己的心灵

淋雨一直走

淋雨一直走

是一颗宝石就该闪烁

人都应该有梦

Oh

有梦就别怕痛

淋雨一直走

是道阳光就该暖和

人都应该有梦

Oh

有梦就别怕痛

有前面盘旋的秃鹰

有前面盘旋的秃鹰

有背后尖酸的耳语

黑色的童话

是给长大的洗礼

要独特才是流行

无法复制的自己

让我连受伤也有型

这不是脾气

是所谓志气 与勇气

你能推我下悬崖

我能学会飞行

从不听

谁的命令

很独立

耳朵用来听自己的心灵

淋雨一直走

淋雨一直走

是一颗宝石就该闪烁

人都应该有梦

Oh

有梦就别怕痛

淋雨一直走

是道阳光就该暖和

人都应该有梦

Oh

有梦就别怕痛

有时掉进黑洞

有时掉进黑洞

有时掉进黑洞

有时候爬上彩虹

在下一秒钟

命运如何转动

没有人会晓得 Oh

我说希望无穷

你猜美梦成空

相信和怀疑

总要决斗

淋雨一直走

淋雨一直走

是一颗宝石就该闪烁

人都应该有梦

Oh

有梦就别怕痛

淋雨一直走

是道阳光就该暖和

人都应该有梦

Oh

有梦就别怕痛

淋雨一直走

淋雨一直走

是一颗宝石就该闪烁

人都应该有梦

Oh

有梦就别怕痛

淋雨一直走

是道阳光就该暖和

人都应该有梦

Oh

有梦就别怕痛

OC/OA : Hermanni Kovalainen/Ilanguaq Lumholt/Henrik Tala

配唱制作人 : Jae Chong

配唱制作人 : Jae Chong

计算机程序编写 : DJ Mobster

录音师 : 潘尧泓

录音室 : Lights Up Studio (台北)

混音师 : Jae Chong

混音室 : AZIATIX Studio

OP : Warner/Chappell Music Finland / DJ Mobster Publishing

SP : Warner/Chappell Music Taiwan Ltd.

ISRC TW-R03-12-02003

lock: { enable: true, background: 'https://img1.baidu.com/it/u=2788089125,168843488&fm=253&app=138&size=w931&n=0&f=JPEG&fmt=auto?sec=1690563600&t=35fa4326e773b3fbf83562ad746b7cd2',//锁屏背景 strings: [ 'Every win named never give up 每一份胜利都叫不放弃',//签名 ], },
点击右上角即可分享
微信分享提示