有关二部图的算法

lemoner2003 2008-11-23 01:53:09
写出采用深度优先搜索图的思想判定任意给定一个无向连通图是否二部图的算法。
...全文
151 点赞 收藏 3
写回复
3 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
A2d3sk3r 2008-11-24
其实就是黑白染色的问题
任意选定一个节点,染黑,与之相连的节点染白,
用深搜或者广搜都行,如果碰到一个顶点已经被染色且与将该染的色相反,则说明不是二部图。
否则继续,直到深搜完毕(如果广搜,则是广搜的队列为空)
如果图不联通,则继续选择为遍历的节点继续如上遍历。
回复
roadblossom 2008-11-24
帮你up一下
回复
tailzhou 2008-11-23
使用一个辅助数组f[n];
f[v]==0表示节点v尚未遍历;
f[v]==1表示节点v属于集合A;
f[v]==-1表示节点v属于集合B;

1)初始化f[n]={0};
2)从图中任取一尚未遍历过的节点v[i],即f[i]==0;
置f[i]=1,从v[i]开始遍历,;
遍历的过程中,对与"当前节点v[j] "有边相连的所有的"节点v[j'] "进行判断;
a) 若f[j']==0,则f[j']=-f[j]
b) 若f[j']==-f[j],则不做任何操作;
c) 若f[j']==f[j],则图不是二分图,完毕;
直到当前的连通分量遍历完毕;
3) 若图还有尚未遍历的连通分量,继续2)直到所有节点都遍历完毕;


回复
相关推荐
发帖
数据结构与算法
创建于2007-08-27

3.2w+

社区成员

数据结构与算法相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2008-11-23 01:53
社区公告
暂无公告