Saturday, April 16, 2011

459 - Graph Connectivity

#include<iostream>
#include<cstdio>
#include<cstring>
#define M 30
using namespace std;

int graph[M][M],times,color[M],hv;
void DFS_Visit(int);

int main()
{
    char inp[5];
    int t,x,y,i;
    freopen("in.txt","r",stdin);

    scanf("%d\n\n",&t);
    while(t--)
    {
        gets(inp);
        hv=inp[0]-65;

        memset(graph,0,sizeof(graph));
        memset(color,0,sizeof(color));

        while(gets(inp))
        {
            for(i=0;inp[i];i++);
            if(!i)break;

            x=inp[0]-65,y=inp[1]-65;
            graph[x][y]=graph[y][x]=1;
        }

        times=0;
        for(i=0;i<=hv;i++)
        {
            if(color[i]==0)
            {
                DFS_Visit(i);
                times++;
            }
        }
        if(t)
            printf("%d\n\n",times);
        else
            printf("%d\n",times);
    }
    return 0;
}

void DFS_Visit(int u)
{
    int i;
    color[u]=1;
    for(i=0;i<=hv;i++)
        if(graph[u][i]&&color[i]==0)
            DFS_Visit(i);
    color[u]=2;
}

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.