求连通分量个数

#include <iostream>

#include <stdio.h>

#include <string.h>



int mapp[210][210] ;

bool vis[210] ;

using namespace std;

int N,M ;



void DFS(int u)

{

    vis[u] = true ;

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

    if(!vis[i] && mapp[u][i])

    DFS(i) ;

}

int main()

{

    int T ;

    scanf("%d",&T) ;

    while(T--)

    {

        scanf("%d %d",&N,&M) ;

        int u,v ;

        memset(mapp,0,sizeof(mapp)) ;

        memset(vis,false,sizeof(vis)) ;

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

        {

            scanf("%d %d",&u,&v) ;

            mapp[u][v] = mapp[v][u] = 1 ;

        }

        int cnt = 0 ;

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

        {

            if(!vis[i])

            {

                DFS(i) ;

                cnt++ ;

            }

        }

        printf("%d\n",cnt) ;

    }

    return 0;

}
View Code

 

你可能感兴趣的:(求连通分量个数)