编程算法 - 二分图判定 代码(C)

二分图判定 代码(C)


本文地址: http://blog.csdn.net/caroline_wendy


题目: 给定一个具有n个顶点的图. 要给图上每个顶点染色, 并且要使相邻的顶点颜色不同. 

是否能最多用2种颜色进行染色. 没有重边和闭环.


二分图问题.


使用深度优先搜索(dfs), 把顶点染成c, 然后相邻边染成-c. 

如果相邻边被染色过, 且相同, 则图不是二分图; 如果所有边都被染色, 并且互不相同, 则是二分图.


进行多次搜索, 避免非连通图.


代码:

/*
 * CppPrimer.cpp
 *
 *  Created on: 2014.7.27
 *      Author: Caroline
 */

/*eclipse cdt*/

#include 

#include 

using namespace std;

class Program {
	static const int MAX_V = 100;

	/*vector G[MAX_V] = {{1,3}, {0,2}, {1,3}, {0,2}};
	int V = 4;*/

	vector G[MAX_V] = {{1,2}, {0,2}, {0,1}};
	int V = 3;

	int color[MAX_V] = {0};

	bool dfs(int v, int c) {
		color[v] = c;
		for (size_t i=0; i


输出:

result = No








你可能感兴趣的:(Mystra,编程算法,二分图判定,代码,C++)