#include <bits/stdc++.h>
using namespace std;
struct edge
{
int num;
int step;
};
int n, m, q, pos;
bool Edge[210][210];
bool vis[210];
int BFS(int st, int pos);
int main()
{
while(cin >> n >> m >> q)
{
memset(Edge, 0, sizeof(Edge));
while(m --)
{
int u, v, k;
cin >> u >> k;
while(k --)
{
cin >> v;
Edge[u][v] = 1;
}
}
while(q --)
{
cin >> pos;
cout << BFS(1,pos) << endl;
}
}
return 0;
}
int BFS(int st, int pos)
{
memset(vis, 0, sizeof(vis));
vis[st] = 1;
edge tp2, tp1;
tp1.num = st;
tp1.step = 1;
queue<edge >Q;
Q.push(tp1);
while(!Q.empty())
{
tp1 = Q.front();
Q.pop();
if(tp1.num == pos)
{
return tp1.step;
}
for(int i = 1; i <= n; i++)
{
if(!vis[i] && Edge[tp1.num][i])
{
vis[i] = 1;
tp2.num = i;
tp2.step = tp1.step+1;
Q.push(tp2);
}
}
}
return -1;
}
SDUT 3468 广度优先搜索练习之神奇的电梯
最新推荐文章于 2020-10-18 11:05:59 发布