PAT A1076

今天也是为了cc,努力奋斗的一天ヾ(≧▽≦*)o

代码

//注意数组下标是从1开始的 
#include<stdio.h>
#include<vector>
#include<queue>

using namespace std;

//基本单位,里面包含节点值和层数 
struct Node{
	int v;
	int layer;
};

int n,l; 
const int MAXN  = 1010;
vector<int> Adj[MAXN];


//用于实现BFS的函数。 
int BFS(int v){
	bool inq[MAXN] = {false};
	
	//定义一个变量保存最大的层数,初始值为0 
	int maxLayer = 0;
	
	//定义一个变量保存转发的最大人数
	int maxNum = 0; 
	queue<Node> q;
	Node start;
	start.v = v;
	start.layer = 0;
	q.push(start);
	inq[v] = true;	//设置为已经入队
	
	
	while(!q.empty()){	//只要队列不为空 
		Node now = q.front();	//取出队列首 
		q.pop();	//弹出队列首 
		
		for(int i=0;i<Adj[now.v].size();i++){
			
			if( inq[Adj[now.v][i]] == false){
				Node next;
				next.v = Adj[now.v][i];
				next.layer = now.layer + 1;
				inq[next.v] = true;
				q.push(next);
				
				if(next.layer > maxLayer){
					maxLayer = next.layer;
				}
				
				if(maxLayer > l){
					maxLayer = next.layer;
					return maxNum;
				}else{
					maxNum++;
				}
			}			
		}
	}
	
	return maxNum;	
}

int main(){
	scanf("%d %d",&n,&l);
	
	for(int i=1;i<=n;i++){
		int m;
		scanf("%d",&m);
		for(int j=0;j<m;j++){
			int k;
			scanf("%d",&k);
			Adj[k].push_back(i);
		}	
	} 
	
	int cnt;
	scanf("%d",&cnt);
	
	for(int i=0;i<cnt;i++){
		int search;
		scanf("%d",&search);
		int num = BFS(search);
		printf("%d\n",num);	
	} 
	
	
	return 0;
}

反思

  1. 刚开始题目的意思没看懂。。。看了《算法笔记》上的中文才知道要干嘛。。。是我英文太差了吗,哭了。
  2. 题目的限制是层数,然后在层数的限制下求最多的转发的人数。
  3. 其他还好,直接套用模板就ok啦。
  4. ps:我的代码写的好辣鸡,不优雅呀,要继续加油。

参考文档

算法笔记

发布了15 篇原创文章 · 获赞 0 · 访问量 219

猜你喜欢

转载自blog.csdn.net/yc_cy1999/article/details/103921043