Sunday, April 3, 2011

10009 - All Roads Lead Where?


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

int list[M][M];

int main()
{
    register int t,r,q,i,j,k,h,a,b;
    char src[M],tgt[M];
    int D[M],color[M],path[M],P[M];
    queue<int>Q;
    //freopen("in.txt","r",stdin);

    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%d\n",&r,&q);

        for(i=0;i<M;i++)
            for(j=0;j<M;j++)
                list[i][j]=0;

        for(i=0;i<r;i++)
        {
            scanf("%s%s\n",src,tgt);
            a=src[0]-65,b=tgt[0]-65;
            list[a][b]=list[b][a]=1;
        }

        for(k=0;k<q;k++)
        {
            scanf("%s%s\n",src,tgt);
            a=src[0]-65,b=tgt[0]-65;

            for(i=0;i<M;i++)
                color[i]=0;

            Q.push(a);D[a]=0;color[a]=1;

            for(;;)
            {
                h=Q.front();
                for(i=0;i<M;i++)
                {
                    if(list[h][i])
                    {
                        if(color[i]==0)
                        {
                            color[i]=1;
                            D[i]=D[h]+1;
                            path[i]=h;
                            if(i==b)break;
                            Q.push(i);
                        }
                    }
                }
                if(i==b)break;
                Q.pop();
                color[h]=2;
            }
            while(!Q.empty())
                Q.pop();

            h=0;
            printf("%c",a+65);
            while(b!=a)
            {
                P[h++]=b;
                b=path[b];
            }
            for(j=h-1;j>=0;j--)
                printf("%c",P[j]+65);
            printf("\n");
        }
        if(t)
            printf("\n");
    }
    return 0;
}

No comments:

Post a Comment

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