poj 3256(DFS)

http://acm.pku.edu.cn/JudgeOnline/problem?id=3256

题意:有k头牛,n个牧场,m条路(每条路相连两个牧场且单向),求全部牛都能到达的牧场有几个。

分析:用DFS,从每头牛所在牧场开始,走遍该牛能到的牧场,对应能到达的牧场记录来过的牛数

心得:原先我是对每个牧场作为起点,进行DFS,当然条件是有路并且对应牧场有牛。不过比较牧场数(n≤1000)和牛数(k≤100),实在太浪费时间了。

部分代码:

main()里的调用部分:

for(i=1; i<=cow; i++)//对应某只牛
{
	memset(vis, 0, sizeof(vis));//初始化下一个牧场
	dfs(add[i]);
}

dfs()

void dfs(int r)
{
	int i;
	vis[r] = 1;//标记已经来过
	num[r]++;	//对应来该牧场牛数加一
	for(i=1; i<=pasture; i++)
		if(!vis[i] && map[r][i])	dfs(i);
}
原文地址:https://www.cnblogs.com/submarinex/p/1941245.html