图的BFS遍历
//
// main.cpp
// PATA1076
//
// Created by Phoenix on 2018/2/18.
// Copyright © 2018年 Phoenix. All rights reserved.
//
#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>
using namespace std;
const int maxn = 1010;
const int inf = 1000000000;
int n, l;
int G[maxn][maxn];
void BFS(int s) {
bool vis[maxn] = {false};
queue<int> q;
int lastnode = s, newlastnode = -1, level = 0, num = 0;
q.push(s);
vis[s] = true;
while(!q.empty()) {
int top = q.front();
//printf("%d ", top);
num++;
q.pop();
for(int i = 1; i <= n; i++) {
if(G[top][i] == 1 && vis[i] == false) {
vis[i] = true;
newlastnode = i;
q.push(i);
}
}
if(top == lastnode) {
lastnode = newlastnode;
level++;
}
if(level > l){
printf("%d\n", num - 1);
break;
}
}
if(level <= l) printf("%d\n", num - 1);
}
int main(int argc, const char * argv[]) {
fill(G[0], G[0] + maxn * maxn, 0);
scanf("%d %d", &n, &l);
for(int i = 1; i <= n; i++) {
int k, a;
scanf("%d", &k);
for(int j = 0; j < k; j++) {
scanf("%d", &a);
G[a][i] = 1;
}
}
int k;
scanf("%d", &k);
for(int i = 0; i < k; i++) {
int a;
scanf("%d", &a);
BFS(a);
}
return 0;
}