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);
}
/**************************************************************************
                 
原文来自博客园——Submarinex的博客: www.cnblogs.com/submarinex/               
 
*************************************************************************/

浙公网安备 33010602011771号