데이터 구조 실험: 연결 분량 개수

데이터 구조 실험: 연결 분량 개수
Time Limit: 1000MS Memory limit: 65536K
제목 설명
 무방 향도 에서 정점 vi 에서 정점 vj 까지 경로 가 있 으 면 vi 와 vj 가 연결된다 고 한다.만약 그림 에서 임의의 두 정점 사이 가 연결 된다 면 이 그림 을 연통 도 라 고 부른다.
그렇지 않 으 면 이 그림 을 비 연통 도 라 고 부 르 면 그 중의 큰 연통 자 도 를 연통 분량 이 라 고 한다. 여기 서 이른바 큰 것 은 서브 맵 에 포 함 된 정점 개수 가 매우 크다 는 것 을 말한다.
예 를 들 어 하나의 무 방향 도 는 5 개의 정점 이 있 고 1 - 3 - 5 는 연결 되 어 있 으 며 2 는 연결 되 어 있 고 4 는 연결 되 어 있 으 며 이 무 방향 도 는 3 개의 연결 분량 이 있다.
 
입력
 첫 번 째 줄 은 정수 T 로 T 조 테스트 샘플 (0 < T < = 50) 이 있 음 을 나타 낸다.테스트 샘플 마다 한 줄 에 두 개의 정수 N, M 을 포함 합 니 다. (0 < N < = 20, 0 < = M < = 200)
각각 N 개의 정점 과 M 개의 변 을 대표 한다.아래 의 M 줄 은 줄 마다 두 개의 정수 u, v, 정점 u 와 정점 v 가 연결 되 어 있다.
출력
 줄 마다 하나의 정수, 분량 의 개 수 를 연결 하 다.
예제 입력
2
3 1
1 2
3 2
3 2
1 2

예제 출력
2
1

제시 하 다.
 
근원
 cz
예제 프로그램
#include
#include
#include
#define N 300
int map[N][N],vis[N];
void dfs(int s,int n)
{
    for(int i = 1;i <= n;i++)
    {
        if(map[s][i] && !vis[i])
        {
            vis[i] = 1;
            dfs(i,n);
        }
    }
}
void god(int n)
{
    int i;
    int count = 0;
    for(i = 1;i <= n;i++)
    {
        if(!vis[i])
        {
            dfs(i,n);
            count++;
        }
    }
    printf("%d
",count); } int main() { int t,n,m; scanf("%d",&t); while(t--) { int a,b; memset(map,0,sizeof(map)); memset(vis,0,sizeof(vis)); scanf("%d %d",&n,&m); for(int i = 1;i <= m;i++) { scanf("%d %d",&a,&b); map[a][b] = 1; map[b][a] = 1; } god(n); } }

 

좋은 웹페이지 즐겨찾기