zoukankan      html  css  js  c++  java
  • 列出连通集

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

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

    输出格式:
    按照"{ v​1​​ v​2​​ ... v​k​​ }"的格式,每行输出一个连通集。先输出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 }
     1 #include <iostream>
     2 #include <string.h>
     3 #include <queue>
     4 using namespace std;
     5  
     6 int n,m;
     7 int mp[10][10]={0},vis[10]={0}; 
     8 
     9 void dfs(int x)
    10 {
    11      vis[x]=1;
    12      cout<<x<<" ";
    13      for(int i=0;i<n;i++)
    14      {
    15            if(mp[x][i]&&!vis[i])
    16            {                 
    17                dfs(i);               
    18            }                        
    19      }
    20 }    
    21 
    22 void bfs(int x)
    23 {
    24     if(!vis[x])
    25     {
    26         vis[x]=1;
    27         cout<<x<<" ";
    28     }
    29     queue<int> qe;
    30     for(int i=0;i<n;i++)
    31     {
    32         if(mp[x][i]&&!vis[i])
    33         {
    34             qe.push(i);
    35             cout<<i<<" ";
    36             vis[i]=1;
    37         } 
    38     }
    39     while(qe.size())
    40     {
    41         int t=qe.front();
    42         bfs(t);
    43         qe.pop();    
    44     }
    45 }
    46 
    47 int main()
    48 {
    49     cin>>n>>m;
    50     int i;
    51     for(i=0;i<m;i++)
    52     {
    53           int a,b;
    54           cin>>a>>b;
    55           mp[a][b]=mp[b][a]=1;          
    56     }
    57     for(i=0;i<n;i++)
    58     {            
    59           if(!vis[i])
    60           { 
    61                 cout<<"{ ";     
    62                 dfs(i);
    63                 cout<<"}"<<endl; 
    64           }         
    65     } 
    66     memset(vis,0,sizeof(vis));
    67     for(i=0;i<n;i++)
    68     {            
    69           if(!vis[i])
    70           { 
    71                 cout<<"{ ";     
    72                 bfs(i);
    73                 cout<<"}"<<endl; 
    74           }         
    75     }                         
    76     return 0;
    77 }
  • 相关阅读:
    题解:CF1494 F. Delete The Edges
    「CEOI2011」选做
    题解:「CEOI2017」Chase
    学习笔记:《具体数学》问题整理
    题解:「COCI2019」 Transport
    【做题记录】位运算
    线性DP
    虚树 virtual-tree
    三元环计数
    长链剖分
  • 原文地址:https://www.cnblogs.com/jiamian/p/10699119.html
Copyright © 2011-2022 走看看