567Risk---------模板题1A
来源:互联网 发布:嵌入式软件著作权范文 编辑:程序博客网 时间:2024/06/05 16:49
#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!