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);

}

你可能感兴趣的:(poj)