SRM 593 Div1 L1:HexagonalBoard,用染色法判断无向图是否为二分图

来源:互联网 发布:ai mac版 编辑:程序博客网 时间:2024/04/30 16:22

题目来源:http://community.topcoder.com/stat?c=problem_statement&pm=12784


最近由于考研,一个多月没有做TopCoder了,第一次参加Div1,结果第一题都没搞出来,看了社论之后学到了用DFS染色法判断无向图是否是二分图的方法。深刻感觉本人太水了,要加油!

代码如下:

#include <algorithm>#include <iostream>#include <sstream>#include <string>#include <vector>#include <stack>#include <deque>#include <queue>#include <set>#include <map>#include <cstdio>#include <cstdlib>#include <cctype>#include <cmath>#include <cstring>using namespace std;/*************** Program Begin **********************/int dx[] = {0, -1, -1, 0, 1, 1}, dy[] = {-1, 0, 1, 1, 0, -1};class HexagonalBoard {private:vector <string> board;int color[50][50];int result, N;public:void DFS(int x, int y, int c){int nx, ny;if ('X' == board[x][y] && -1 == color[x][y]) {color[x][y] = c;result = max(result, 1);for (int i = 0; i < 6; i++) {nx = x + dx[i];ny = y + dy[i];if (nx < 0 || nx > N-1 || ny < 0 || ny > N-1) {continue;}if ('X' == board[nx][ny]) {result = max(result, 2);DFS(nx, ny, !c);if (c == color[nx][ny]) {result = 3;}}}}}int minColors(vector <string> board){this->board = board;memset(color, -1, sizeof(color));result = 0;N = board.size();for (int i = 0; i < N; i++) {for (int j = 0; j < N; j++) {DFS(i, j, 0);}}return result;}};/************** Program End ************************/


原创粉丝点击