图的搜索
来源:互联网 发布:淘宝上二手ipad靠谱吗 编辑:程序博客网 时间:2024/05/18 13:48
二分图判定:给定一个具有n个顶点的图。要给图上每个顶点染色,并且要使相邻的顶点颜色不同。问是否能最多用2中颜色进行染色?题目保证没有重边和自环。 (1<=n<=1000)
把相邻的顶点染成不同的颜色叫做图着色问题。对图进行着色所需要的最小颜色数称为最小着色数。最小着色数为2的图称为二分图。
如果只用2种颜色,那么确定一个顶点的颜色之后,和它相邻的顶点的颜色也就确定了。因此,选择任意一个顶点出发,依次确定相邻顶点的颜色,就可以判断是否可以被2种颜色染色了。这个问题如果用深度优先搜索的话,能够简单的实现。
vector <int> G[MAX_V];//图int V;//顶点数int color[MAX_V];//顶点i的颜色(1 or -1)//把顶点染成1或-1bool dfs(int v, int c) {color[v] = c;//把顶点v染成颜色cfor (int i = 0; i<G[v].size(); i++) {//如果相邻的顶点同色,则返回false if (G[v][i] == c)return false;//如果相邻的顶点还没被染色,则染成-cif (color[G[v][i]] == 0 && !dfs(G[v][i], -c)) return false;} return true;} void solve() {for (int i = 0; i<V; i++) {if (color[i] == 0) {//如果顶点i还没被染色,则染成1if (!dfs(i, 1)) {cout << "NO" <<endl;return ; } }}cout << "YES" << endl;}
如果是连通图,那么一次dfs就可以访问到所有的顶点。如果题目描述中没有说明,那么有可能图是不连通的,这样就需要依次检查每个顶点是否访问过,判断图是否是一个连通图或者是否是一棵树,都只需将dfs进行一些修改就可以了。通过dfs也可以求图的拓扑序。由于每个顶点和每条边都只访问了一次,因此复杂度是O(|V| + |E|)。
0 0
- 图的深度搜索和广度搜索
- 图的定义、广度搜索、深度搜索
- 图的深度搜索和广度搜索
- 图的搜索(深度搜索)
- 图的搜索算法
- 图的搜索算法
- 图的深度搜索
- 图的搜索
- 图的路径搜索
- 图搜索的通用算法
- 图的广度优先搜索
- 图的广度优先搜索
- 图的深度优先搜索
- 图的邻接表搜索
- 图的广度优先搜索
- 图的深度优先搜索
- 图的广度优先搜索
- 图的广度优先搜索
- Python利用结巴分词进行中文分词
- iOS开发之UIViewController属性
- Java Web中的中文编码问题(上)
- 线段树延迟标记精讲
- LeetCode 14 : Longest Common Prefix (Java)
- 图的搜索
- Python环境下新模块的安装(httplib2)
- hdoj 反素数 2521 (打表&暴力)
- hdoj 5562 Clarke and food 【水题】
- Hint:Parameter 'in' is declared but never used in 'query_student'
- Android图片之三级缓存(着重讲内存缓存)
- XMPP
- python编码问题的另一种解决方式(vim)
- OpenCV&VS2010&Win7(64位)配置