读书人

567Risk-模板题1A

发布时间: 2012-10-19 16:53:36 作者: rapoo

567Risk---------模板题1A

#include<cstdlib>#include<iostream>#include<sstream>#include<cstdio>#include<cmath>#include<cstring>#include <algorithm>#include<vector>#include<set>#include<queue>#define LL long long#define inf 0x7fffffff#define E 1e-9#define M 100#define N 21using namespace std;int n,m;int ma[N][N],d[N],p[N];int way(int a,int b){    memset(d,-1,sizeof(d));    d[a]=0;    int f=0,r=0;    p[r++]=a;    while(f<r)    {        int u=p[f++];        for(int i=1; i<=20; i++)            if(d[i]==-1&&ma[u][i])            {                d[i]=d[u]+1;                if(i==b)                    return d[i];                p[r++]=i;            }    }}int main(){#ifndef ONLINE_JUDGE    freopen("ex.in","r",stdin);#endif    int ncase=0;    while(scanf("%d",&n)!=EOF)    {//        if(ncase)//        printf("\n");        memset(ma,0,sizeof(ma));        for(int j=0; j<n; ++j)        {            scanf("%d",&m);            ma[1][m]=ma[m][1]=1;        }        for(int i=2; i<=19; i++)        {            scanf("%d",&n);            for(int j=0; j<n; ++j)            {                scanf("%d",&m);                ma[i][m]=ma[m][i]=1;            }        }        printf("Test Set #%d\n",++ncase);        scanf("%d",&n);        int a,b;        for (int i=0; i<n; i++)        {            scanf("%d%d",&a,&b);            int len=way(a,b);            printf("%2d to %2d: %d\n",a,b,len);        }        printf("\n");    }    return 0;}
也可用floyd!

读书人网 >编程

热点推荐