分值 : 30 难度 : 中等题 思路 : 限定层数的层序遍历 坑点 : 一次AC,不知道坑点.
123456789101112131415161718192021222324252627282930313233343536373839404142434445
#include <iostream>using namespace std ;int Map[1001][1001] ;int main() { int N , L ,query ; cin >> N >> L ; for(int i = 1 ;i<=N ;i++) { int sum , temp ; cin >>sum ; for(int j = 0 ; j < sum ; j++) { cin >> temp ; Map[temp][i] =1 ; } } cin >> query; int ques ; for(int i = 0 ; i< query; i++) { cin >> ques ; int cur = 0 , count = 0 ; int queen[1001] ,level[1001 ] ,flag[1001]; for(int j = 1 ; j<= N ; j++) {queen[j] = 0 ;flag[j]=0; level[j] = 0 ;} queen[count++] = ques ; level[ques] = 0 ; flag[ques] =1 ; while(cur <count && level[ queen[cur] ] < L ) { int index = queen[cur] ; //index 是当前的 点 for(int j = 1 ; j <= N ; j++) { if(flag[j]) continue; if(Map[index][j]) { level[j] = level[index] +1 ; //j的level 是当前index 的level +1 queen[count ++] = j; //把j这个点 融入到队列 flag[j] = 1 ; //j标记访问 } } cur ++; } cout <<count-1<<endl ; }}