您好,欢迎来到99网。
搜索
您的当前位置:首页1013-DFS之连通分量

1013-DFS之连通分量

来源:99网
//求连通分量————————只是连通问题
//注意:顶点是从1-n,而不是0-n-1

#include<bits/stdc++.h>
#define MAXN 1005
using namespace std;

int G[MAXN][MAXN];
bool vis[MAXN];
int n, m;

void DFS(int nowvisit){
    vis[nowvisit] = true;
    for(int i = 1; i <= n; i++){
        if(G[nowvisit][i] && vis[i] == false){
            DFS(i);
        }
    }
}
void DFSTrarse(int &num){
    for(int i= 1; i <= n; i++){
        if(vis[i] == false){
            num++;
            DFS(i);
        }
    }
}

int main(){
    int k, n1, n2, num;
    cin >> n >> m >> k;
    for(int i = 0; i < m;i++){
        cin >> n1 >>  n2;
        G[n1][n2] = G[n2][n1] = 1;
    }
    for(int i = 0; i < k; i++){
        fill(vis, vis+MAXN/*vis+n+1*/, false);   //改成n就不可以————改成n+1!!因为节点是1-n, 所以默认0-n都得在,一共n+1个节点。
        cin >> num;
        vis[num] = true;
        int num = 0;
        DFSTrarse(num);

        if(num)cout << num-1 << endl;
        else cout << 0 << endl;
    }

    return 0;
}

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 99spj.com 版权所有 湘ICP备2022005869号-5

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务