uva10004 Bicoloring 黑白染色问题,DFS
2013-07-09 23:52
381 查看
又是水题,最近切题目只能切出水题。。。orz
给出一个联通图,要求在个点上染上两种颜色,相邻的点颜色不能相同,看能不能染色成功。
用dfs搜索一个点的每条边,着色递归,如果已经染过色的且颜色出现矛盾就退出,用flag优化。
由于是联通图,不用考虑孤立的点或图,就比较容易了。
据说可以用并查集做,额,估计要用加权。。。
代码:
给出一个联通图,要求在个点上染上两种颜色,相邻的点颜色不能相同,看能不能染色成功。
用dfs搜索一个点的每条边,着色递归,如果已经染过色的且颜色出现矛盾就退出,用flag优化。
由于是联通图,不用考虑孤立的点或图,就比较容易了。
据说可以用并查集做,额,估计要用加权。。。
代码:
#include <cstdio> #include <cstdlib> #include <cstring> char maze[31][81]; void dfs(int x, int y) { maze[x][y] = '#'; if (maze[x - 1][y] == ' ') dfs(x - 1, y); if (maze[x][y - 1] == ' ') dfs(x, y - 1); if (maze[x + 1][y] == ' ') dfs(x + 1, y); if (maze[x][y + 1] == ' ') dfs(x, y + 1); } int main() { int n; // freopen("in", "r", stdin); scanf("%d", &n); gets(maze[0]); while (n--) { int i = 0; while (gets(maze[i]) && maze[i][0] != '_') { i++; }//input bool flag = true; for (int k = 0; k < i; k++) for (int j = 0; flag && j < strlen(maze[k]); j++) if (maze[k][j] == '*') { maze[k][j] = '#'; dfs(k, j); // printf("%d %d\n", k, j); flag = false; } // printf("%d %d\n", i, flag); for (int k = 0; k <= i; k++) puts(maze[k]); }//while }
相关文章推荐
- uva10004 Bicoloring 黑白染色问题,DFS
- UVA 10004 Bicoloring(DFS染色)
- UVA - 10004 - Bicoloring(染色问题)
- uva 10004 Bicoloring(dfs二分染色,和hdu 4751代码差不多)
- uva 10004 Bicoloring(DFS)
- uva 10004 Bicoloring(二染色)
- Bicoloring - UVa 10004 dfs
- UVa 10004 Bicoloring (DFS&二分图)
- uva10004 Bicoloring 二分图染色
- DFS染色解决区域分块问题UVALive 6663
- UVA10004- Bicoloring(二染色)
- UVA 10004 - Bicoloring(DFS)
- uva 10004 Bicoloring 二染色
- UVA 10004 Bicoloring【DFS简单二部图判定】
- UVa10004 Bicoloring (dfs水题)
- UVA - 10004 Bicoloring (dfs和bfs两种解法)
- uva 10004 Bicoloring (二分图染色/求一个二分图)
- UVa 10004 Bicoloring(二分图判定+DFS)
- UVa 10004: Bicoloring
- UVA - 10004 - Bicoloring (简单图论-着色判断)