UVA 10004 二染色

简单题

对于强连通无向图,采用两种颜色进行染色,检查是否存在环路

#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;

///
#define Maxn 250
bool maze[Maxn][Maxn];
int color[Maxn];
//color数组记录当前顶点所采用的颜色
int n, l;
bool dfs(int u)
{
	int i;
	for (i = 0; i < n; i++)
	{
		if (maze[u][i])
		{
			if (color[i] == color[u])
				return false;
			else if (color[i] == -1)
			{
				color[i] = 1 - color[u];
				if (!dfs(i))
					return false;
			}
		}
	}
	return true;
}

int main()
{
	///
	int i, j;
	while (1)
	{
		cin >> n;  //顶点个数
		if (n == 0)
			break;
		cin >> l;  //边的个数
		memset(color, -1, sizeof(color));
		memset(maze, false, sizeof(maze));
		for (i = 0; i < l; i++)
		{
			int node1, node2;
			cin >> node1 >> node2;
			maze[node1][node2] = maze[node2][node1] = true;
		}
		color[0] = 0;
		if (!dfs(0))
			cout << "NOT BICOLORABLE." << endl;
		else
			cout << "BICOLORABLE." << endl;

	}



	///
    return 0;
}


 


 

你可能感兴趣的:(UVA,6-图算法)