zoukankan      html  css  js  c++  java
  • PAT1013

    主要思路,利用DFS在无向图中寻找有几个连通分量!  当数据量大时, DFS耗时, 用并查集即可!

     1 #include<iostream>
     2 #include<vector>
     3 using namespace std;
     4 #define M 999999
     5 #define WHITE 0
     6 #define GRAY 1
     7 #define BLACK 2
     8 
     9 void DFS_visit(vector<vector<int>> &map, int v, vector<int> &used)
    10 {
    11     used[v] = GRAY;
    12     for(int i=0; i<used.size(); ++i)
    13         if(map[v][i] != M && used[i] == WHITE)
    14             DFS_visit(map, i, used);
    15     used[v] = BLACK;
    16 }
    17 
    18 int DFS_version(vector<vector<int>> map, int start)
    19 {
    20     for(int i=0; i<map.size(); ++i)
    21         map[start][i]=map[i][start]=M;
    22     /*断开路*/
    23     int count(0);
    24     /*记录有几个连通分量*/
    25     vector<int> used(map.size(), WHITE);
    26     for(int i=start; i < start+used.size(); ++i)
    27     {
    28         int m = i%used.size();
    29         if(used[m] == WHITE)
    30         {
    31             DFS_visit(map, m, used);
    32             ++count;
    33         }
    34     }
    35     return count;
    36 }
    37 
    38 int main()
    39 {
    40     int n,m,k;
    41     while(cin>>n>>m>>k)
    42     {
    43         vector<int> colum(n, M);
    44         vector<vector<int>> map(n, colum);
    45         vector<int> check;
    46         for(int i=0; i < m; ++i)
    47         {
    48             int j,k; cin>>j>>k;
    49             map[j-1][k-1]=map[k-1][j-1]=1;
    50         }
    51         for(int i=0; i<k; ++i)
    52         {
    53             int j; cin>>j;
    54             check.push_back(j-1);
    55         }
    56         for(int i=0; i<check.size();++i)
    57             cout<<DFS_version(map, check[i])-2<<endl;
    58     }
    59     return 0;
    60 }
  • 相关阅读:
    杭电ACM1.2.6 Decimal System
    杭电ACM1.2.7 GPA
    taro hook 倒计时setTimeout版
    taro hook 倒计时setInterval版
    Vuecli3内存溢出解决方案记录
    哈希
    hashmap和hashtable区别
    HashMap[转]
    JAVA中List、Map、Set
    C++和MATLAB混合编程DLL篇[转]
  • 原文地址:https://www.cnblogs.com/bochen-sam/p/3351437.html
Copyright © 2011-2022 走看看