首页 > 其他分享 >图的遍历(新)

图的遍历(新)

时间:2024-10-23 20:48:02浏览次数:3  
标签:遍历 cout int v1 v2 m2

输入描述

输入第一行为 n 和 m,表示有 n 个结点,编号从 1 到 n,m 表示有该图有 m 条边,接下来 m 行,每行两个整数 a 和 b,表示结点 a 到结点 b 有一条边。

输出描述

输出为两行,第一行为深度遍历的结果,第二行为广度遍历的结果,每个顶点间用一个‘-’符号隔开,假定每次都从结点1开始遍历,且优先遍历编号低的,每种遍历只需要一种遍历结果。

样例输入 1 

4 3
1 2
1 3
2 4

样例输出 1 

1-2-4-3
1-2-3-4

#include<bits/stdc++.h>
using namespace std;
int g[105][105],v1[105],v2[105];
int n,e,a,b;
int m1,m2;
queue <int> q;
void dfs(int cnt){
    m1++;
    cout<<cnt;
    if(m1<n) cout<<'-';
    for(int i=1;i<=n;i++){
        if(g[cnt][i]==1&&v1[i]==0){
            v1[i]=1;
            dfs(i);
        }
    }
}

void bfs(int cnt){
    q.push(cnt);
    cout<<cnt;
    m2++;
    if(m2<n) cout<<'-';
    while(!q.empty()){
        for(int i=1;i<=n;i++){
            if(g[q.front()][i]==1&&v2[i]==0){
                v2[i]=1;
                q.push(i);
                cout<<i;
                m2++;
                if(m2<n) cout<<'-';
            }
        }
        q.pop();
    }
    
}

int main(){
    cin>>n>>e;
    for(int i=0;i<e;i++){
        cin>>a>>b;
        g[a][b]=1;
        g[b][a]=1;
    }
    for(int i=1;i<=n;i++){
        if(v1[i]==0){
            v1[i]=1;
            dfs(i);
        }
    }
    cout<<endl;
    for(int i=1;i<=n;i++){
        if(v2[i]==0){
            v2[i]=1;
            bfs(i);
        }
    }
    return 0;
}

标签:遍历,cout,int,v1,v2,m2
From: https://blog.csdn.net/2401_86852582/article/details/143193644

相关文章

  • Python脚本,它将遍历指定目录下的所有.srt文件,移除其中的不必要的英文字符、不必要的空
    Python脚本,它将遍历指定目录下的所有.srt文件,移除其中的不必要的英文字符、不必要的空行以及不必要的空格。该脚本会保留字幕索引、字幕时间线以及字幕中的中文内容,并且只保留字幕中的中文内容。它还会保留字幕行与字幕之间的换行符,同时去掉字幕与字幕之间的不必要的换行符。处理......
  • 【头歌实训:邻接表存储图的广度优先遍历】
    头歌实训:邻接表存储图的广度优先遍历文章目录任务描述相关知识邻接表存储图图的遍历广度优先遍历过程:算法设计思路:编程要求测试说明输入格式:输出格式:样例输入:样例输出:源代码:任务描述相关知识邻接表存储图图的遍历广度优先遍历过程:算法设计思路:......
  • 数组的往返(数组来回遍历)C语言版
    文章目录前言题目描述一、数组的往返是什么?二、实现1.具体代码2.完整题解代码总结以及一些疑问前言本篇文章灵感来源于第十三届蓝桥杯省赛C++B组第六题修剪灌木,我的方法是老老实实地走完这个流程得到答案题目描述爱丽丝要完成一项修剪灌木的工作。有N棵灌......
  • mysql对结果集进行遍历(mysql双重for循环如何写)
    原文链接:mysql对结果集进行遍历(mysql双重for循环如何写)–每天进步一点点0.背景有这么一个需求:对以下的类型结果集进行更新。更新的原则是type为c的currentValue的值=(type为b的currentValue)/((type为b的currentValue)+(type为a的currentValue))*100。上面这个需求......
  • go 反射 遍历对象属性 切片 Map
    packagemainimport"fmt"import"reflect"funcmain(){p1:=Person{Name:"test1",Age:20,Address:"1323"}p2:=Person{Name:"demo2",Age:24,Address:"adsd"}varlist[]*Pers......
  • 图论之搜索遍历
    前言一个重要的板块,倒是有很多有趣的题,从搜索开始吧MazeTacToeS暴力即可,\(3^9\times25\times25\)绰绰有余,把状态转换为三进制\(dfs\)ConnectedComponents?根据鸽巢原理,必定有一个点被割去的边\(\le\frac{m}{n}\),然后我们找到这个点,对于连接他的边均在同一个联......
  • 二叉树的中序遍历
    给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。示例1:输入:root=[1,null,2,3]输出:[1,3,2]示例2:输入:root=[]输出:[]示例3:输入:root=[1]输出:[1]提示:树中节点数目在范围 [0,100] 内-100<=Node.val<=100进阶: 递归算法很简单,你可以通......
  • 岛屿数量(深度优先遍历)
    给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。示例1:输入:grid=[["1","1","1","1","0"],["1","1",&qu......
  • python中怎么遍历字典
    遍历字典:keys() 、values()、items()1、xxx.keys():返回字典的所有的key,返回一个序列,序列中保存有字典的所有的键。效果图:代码:# keys() 该方法会返回字典的所有的key#   该方法会返回一个序列,序列中保存有字典的所有的键d = {'name':'孙悟空','age':1......
  • C语言手撕实战代码_线索二叉树_先序中序线索二叉树_树的先根遍历_后根遍历_树的度_孩
    文章目录1.设计算法构造一棵先序线索二叉树2.先序线索二叉树的先序遍历算法3.设计算法构造一棵中序线索二叉树4.遍历中序线索二叉树5.树的先根遍历和后根遍历6.树T的叶子结点个数7.计算一棵以孩子兄弟表示的树T的度,该算法的时间复杂度为O(n)8.计算树孩子兄弟链表表示的T......