poj 1129 Channel Allocation(四色定理)
2015-03-29 10:18
447 查看
< / pre><pre name = "code" class = "cpp">#include "stdio.h" #include "string.h" #include "algorithm" using namespace std; int map[26][26]; int used[26]; char ch[30]; int n; /* 这个dfs是基于四色定理,所以dfs第一层循环i最大为4 这种写法可以运作在四色定理的题目里,无向图任意的相邻两点颜色不同 */ void dfs(int node){ int flag, i, j; if (node == n) return; for (i = 1; i <= 4; i++){ flag = 0; //如果新结点与相邻结点颜色相同 则需要加颜色了,即i加1 for (j = 0; j<n; j++){ if (map[node][j] && used[j] == i){ flag = 1; break; } } //这个if意思是如果新结点与相邻结点颜色都不相同,那么就染旧颜色,再搜索下一个结点 if (!flag){ used[node] = i; dfs(node + 1); break; } } } int main(){ int i, j; while (scanf("%d", &n), n){ memset(map, 0, sizeof(map)); memset(used, 0, sizeof(used)); for (i = 0; i < n; i++){ scanf("%s", ch); for (j = 2; j < strlen(ch); j++) { map[i][ch[j] - 'A'] = 1; map[ch[j] - 'A'][i] = 1; } } dfs(0); sort(used, used + 26); if (used[25] == 1) printf("1 channel needed.\n"); else printf("%d channels needed.\n", used[25]); } }
DFS
相关文章推荐
- POJ 1129 Channel Allocation (dfs+四色定理)
- POJ - 1129 Channel Allocation (dfs,四色定理)
- POJ-1129-Channel Allocation-dfs搜索+四色定理
- poj_1129_Channel Allocation(四色定理)
- POJ 1129 Channel Allocation(DFS + 四色定理)
- POJ - 1129 Channel Allocation解题报告(涂色问题+四色定理)
- poj 1129(dfs+图的四色定理)
- poj 1129(DFS+四色定理)
- poj 1129 Channel Allocation (四色定理)
- POJ Channel Allocation 1129(dfs+四色定理)
- poj 1129(dfs+图的四色定理)
- POJ Channel Allocation 1129(dfs+四色定理)
- poj-1129-Channel Allocation-四色定理
- POJ1129-Channel Allocation
- poj 1129 Channel Allocation
- poj 1129 也算是遍历的吧 两种方法
- poj 1129
- POJ 1129 Channel Allocation (DFS)
- POJ 1129 Channel Allocation DFS搜索 着色问题
- poj 1129 Channel Allocation