您的位置:首页 > 其它

遍历新姿势

2016-01-31 00:00 92 查看
int dfs(int u, int p)

{

int left=2;

for(int i=0; i<vec[u].size(); i++)

{

int v = vec[u][i];

if(v==p) continue;

int x = dfs(v, u);

if(left>0 && x==1)

{

ans++;

left--;

}

}

return left>0 ? 1:0;

}

这是个有向循环图,vec[i][j]表示从i到j;

从完全图中搜索尽可能多的生成树的树枝。这里left有很神奇的功能当存在分叉时节点返回值。

例如

1->2

2->3

3->4

这时 节点3,4返回1.ans=2;

节点2返回 0 使节点1的ans=3;没有增加多余树枝。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: