OJ-ID:
    POJ-1129

author:
    Caution_X

date of submission:
    20190927

tags:
    DFS+四色原理的应用

description modelling:
    给定n个点的无向连通图,问至少需要几种颜色可以完成染色

major steps to solve it:
    1.任选从一点开始染色
    2.DFS不断向其他点进行染色
    3.所有点都染过色,结束DFS

warnings:
    根据四色原理,所有的图都可以用四种颜色完成染色

AC code:

#include <iostream>
#include <cstring>
#include <cstdlib>
#include <string>
#include <cctype>
#include <vector>
#include <cstdio>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#include <set>
#define ll long long
#define ull unsigned long long
using namespace std;
int n, ans, ok, vis[28];
bool ma[28][28];
bool check(int u, int sb)
{
    for (int i = 1; i <= n; i++)
        if (ma[u][i] && vis[i] == sb) {
            return 0;
        }
 
    return 1;
}
void dfs(int u, int s)
{
 
    if (ok) {
        return ;
    }
 
    if (u == n + 1) {
        ans = s;
        ok = 1;
        return ;
    }
 
    for (int k = 1; k <= s; k++) {
        if (check(u, k)) {
            vis[u] = k;
            dfs(u + 1, s);
        }
    }
 
    vis[u] = ++s;
    dfs(u + 1, s);
}
int main()
{
    char s[38];
 
    while (scanf("%d", &n) != EOF && n) {
        memset(ma, 0, sizeof(ma));
        memset(vis, 0, sizeof(vis));
        getchar();
 
        for (int i = 1; i <= n; i++) {
            scanf("%s", s);
            int len = strlen(s);
 
            for (int j = 2; j <= len - 1; j++) {
                ma[i][s[j] - 'A' + 1] = 1;
                ma[s[j] - 'A' + 1][i] = 1;
            }
        }
 
        ok = 0;
        dfs(1, 1);
 
        if (ans == 1) {
            puts("1 channel needed.");
        } else {
            printf("%d channels needed.\n", ans);
        }
    }
 
    return 0;
}

最新文章

  1. 如何通过js跨域调用ASP.NET Web API (请问如何实现在javascript中通过http get的方式跨域调用ASP.NET Web API?)
  2. DOM(五)事件对象
  3. php总结:1.php介绍
  4. PHPCMS二次开发教程
  5. Struts2 语法--result type
  6. angular路由详解一(基础知识)
  7. java 设计模式 ---- 工场模式
  8. nginx学习笔记(一)
  9. Python面试题之Python面试题汇总
  10. SQL SERVER 查询哪些存储使用了该表
  11. IEEE signal processing letters 投稿经验
  12. java添加多个水印
  13. XamarinEssentials教程设置首选项Preferences的值
  14. 【Linux】【Jenkins】系统配置报反向代理设置有误问题的解决方案
  15. 一条sql语句引发的遐想:select t.*, t.rowid from STUDENT t
  16. Spring Framework核心概念之Bean生命周期管理
  17. 深入理解C/C++二维数组
  18. 项目经验总结-twice
  19. restful api安全验证问题
  20. 转 tensorflow模型保存 与 加载

热门文章

  1. Bootstrap --------- 了解与使用
  2. Redisson实现分布式锁(3)—项目落地实现
  3. GO与PHP的AES交互,key长度问题
  4. 如何访问到静态的文件,如jpg,js,css.
  5. String字符串工具类
  6. JS基础语法---冒泡顺序
  7. layui js 常用语句语法
  8. CodeForces - 1228C(质因数分解+贡献法)
  9. fetchone函数和fetchall函数返回值的区别
  10. 解构如何运用的解构--报错 throw new TypeError(&#39;Router.use() requires a middleware function but got a &#39; + gettype(fn))