首页 > 其他分享 >天梯赛--列出连通集代码及注意事项

天梯赛--列出连通集代码及注意事项

时间:2023-04-22 22:45:45浏览次数:29  
标签:cout -- ++ ne dfs int st1 天梯 注意事项

问题描述:

给定一个有N个顶点和E条边的无向图,请用DFS和BFS分别列出其所有的连通集。假设顶点从0到N−1编号。进行搜索时,假设我们总是从编号最小的顶点出发,按编号递增的顺序访问邻接点。

输入格式:

输入第1行给出2个整数N(0<N≤10)和E,分别是图的顶点数和边数。随后E行,每行给出一条边的两个端点。每行中的数字之间用1空格分隔。

输出格式:

按照"{ v1 v2 ... vk }"的格式,每行输出一个连通集。先输出DFS的结果,再输出BFS的结果。

输入样例:

8 6

0 7

0 1

2 0

4 1

2 4

3 5

输出样例:

{ 0 1 4 2 7 }

{ 3 5 }

{ 6 }

{ 0 1 2 7 4 }

{ 3 5 }

{ 6 }

设计思路:

标准的bfs与dfs板子题,需要注意的是,存边的时候要注意要按顶点的大小来存,不然输出的时候节点的顺序不是按从小到大排序,会卡测试点。

代码实现:

#include <bits/stdc++.h>

using namespace std;

const int N = 1e5;

int n, e;

int cnt = 0;

vector<int> ne[N];

bool st1[N];

void dfs(int x)

{

    st1[x] = true;

    cout << x << ' ';

    for (int i = 0; i < ne[x].size(); i++)

    {

        int t = ne[x][i];

        if (!st1[t])

            dfs(t);

    }

}

void bfs(int x)

{

 

    queue<int> q;

    q.push(x);

    if (cnt)

        cout << endl;

    cnt++;

    cout << "{ ";

    while (q.size())

    {

        int t = q.front();

        q.pop();

        cout << t << ' ';

        for (int i = 0; i < ne[t].size(); i++)

        {

            int u = ne[t][i];

            if (!st1[u])

            {

                st1[u] = true;

                q.push(u);

            }

        }

    }

    cout << '}';

}

int main()

{

    cin >> n >> e;

    for (int i = 0; i < e; i++)

    {

        int a, b;

        cin >> a >> b;

        ne[a].push_back(b);

        ne[b].push_back(a);

    }

    for (int i = 0; i < n; i++)

        sort(ne[i].begin(), ne[i].end());

    for (int i = 0; i < n; i++)

    {

        if (!st1[i])

        {

            st1[i] = true;

            cout << "{ ";

            dfs(i);

            cout << '}';

            cout << endl;

        }

    }

    for (int i = 0; i < N; i++)

        st1[i] = false;

    for (int i = 0; i < n; i++)

    {

        if (!st1[i])

            st1[i] = true, bfs(i);

    }

 

}

标签:cout,--,++,ne,dfs,int,st1,天梯,注意事项
From: https://www.cnblogs.com/wang111215/p/17344329.html

相关文章

  • 一分钟夺回Windows系统权限
    Windows10总是替我们想得很周到,各种各样的安全设置,云里雾里感觉老安全了。可是,为什么我自己的电脑,权限反而不是自己的?!删除个文件还要权限?别管那么多,把我的电脑还给我!一分钟夺回Windows系统权限对“此电脑”右键选择“管理”进入管理设置:在“系统工具”的下拉菜单中找到“本......
  • 模板匹配
    1#模板匹配2#模板匹配和卷积原理很像,模板在原图像上从原点开始滑动3#计算模板与(图像被模板覆盖的地方)的差别程度,这个差别程度的计算方法在opencv里有6种4#然后将每次计算的结果放入一个矩阵里,作为结果输出。5#假如原图形是AxB大小,而模板是axb大小,则输出结果的矩阵......
  • Python 字符串占位符
    字符串不能修改使用+运算符拼接字符串,字符串与非字符串不能直接拼接。 弊端:如果变量过多,拼接起来很麻烦;字符串与非字符串之间无法进行拼接 name="Tom"info="%sis18yearsold"%name %s是占位符:%表示要占位s表示将引入的变量转为字符串放入该......
  • 原型设计工具实践及比较
    目录一.原型设计工具比较1.墨刀适用领域优点缺点2.Axure适用领域优点缺点3.Mockplus适用领域优点缺点二.原型设计1.主题名称2.功能3.界面设计考虑因素4.切换界面(1)主页面(2)天气(3)音乐(4)相册(5)闹钟5.界面切换流程一.原型设计工具比较1.墨刀适用领域浏览器注册使用,Windows、Mac桌面客......
  • 构建之法阅读笔记
    对于软件开发的阶段,书中举了个飞机的例子很多小孩叠过纸飞机,心里一定有”长大了我要在天上飞”的想法。多年以后,很多人还有“在天上飞”的想法。有人居然就实现了。(热气球升天)和上面提到的偶尔“疯狂”的行为比起来,另外一些人能持续疯狂好几年。(莱特兄弟的飞机)这个例子莫名地就拨......
  • VBA学习笔记901_代码留存
    只是为了记录一些跑过的代码,尽量加上注释,但有些非常简单,只是为了以后快速熟悉代码结构条件选择`最基本If逻辑表达式Then'如果逻辑表达式为真,则执行这里的语句Endif`加强版If逻辑表达式Then'如果逻辑表达式为真,则执行这里的语句Else'否则(即逻辑表达......
  • 人脸识别 进度9
    张旭彤:写了:修复了新增学生后签到总表显示错误的问题问题:没有进行较为完善的整体测试准备:进行较为完善的整体测试冀朝赛:美化了一些页面的按钮,对新的学生注册并录入照片功能页面进行了美化。 团队照片: ......
  • 《用户故事与敏捷方法》读书笔记5
      软件开发是渐进明细的过程,充满挑战。软件需求是被识别为最常见的痛苦根源。如何定义需求,冗长的文档已经不被阅读者接受,简单、精准、一目了然的格式一致的用户故事越来越被接受。当掌握刚刚足够的信息就继续前行,按需及时开展,通过交谈获取所需要的细节。从用户角度出发描述......
  • Atom 1.13版本带来的哪些改变?
    Atom是GitHub基于Electron的开源文本编辑器,它的1.13版本为用户和开发人员增加了许多新的特性和改进,包括一个基准工具,一个“重新打开项目”菜单选项和API,以及一个自定义按钮解析器,它可以把Chrome键盘事件映射为Atom风格的按键。在Atom之前,只能使用Chrome的分析工具来度量A......
  • Atom 1.13版本带来的哪些改变?
    Atom是GitHub基于Electron的开源文本编辑器,它的1.13版本为用户和开发人员增加了许多新的特性和改进,包括一个基准工具,一个“重新打开项目”菜单选项和API,以及一个自定义按钮解析器,它可以把Chrome键盘事件映射为Atom风格的按键。在Atom之前,只能使用Chrome的分析工具来度量A......