• 搜索与图论:染色法判定二分图


    将所有点分成两个集合,使得所有边只出现在集合之间,就是二分图

    二分图:一定不含有奇数个点数的环;可能包含长度为偶数的环, 不一定是连通图

    染色可以使用1和2区分不同颜色,用0表示未染色
    遍历所有点,每次将未染色的点进行dfs, 默认染成1或者2
    由于某个点染色成功不代表整个图就是二分图,因此只有某个点染色失败就能立刻break/return

    染色失败相当于存在相邻的2个点染了相同的颜色,即点的个数的奇数个

    染色法判定二分图

    1. #include
    2. #include
    3. using namespace std;
    4. const int N = 1e5 + 10, M = 2e5 + 10; // 由于是无向图, 顶点数最大是N,那么边数M最大是顶点数的2倍
    5. int e[M], ne[M], h[N], idx;//邻接表
    6. int st[N];//该点的颜色
    7. void add(int a, int b)
    8. {
    9. //头插法
    10. //如图 如1与2之间要有一条线,让2的ne为1,再让h[1]为2的索引。
    11. //这样h[1]就是1节点存的最后一个相连的点,如图就是7节点。
    12. //而在索引表内部,通过头插法的方式(即每次ne指向上一个点(h存的就是上一个点)),索引表为:7->4->2
    13. e[idx] = b, ne[idx] = h[a], h[a] = idx ++;
    14. }
    15. bool dfs(int u, int color)
    16. {
    17. st[u] = color;
    18. for(int i = h[u]; i != -1; i = ne[i])
    19. {//遍历邻接表
    20. int j = e[i];
    21. if(!st[j]) //若还没颜色,则递归下去染色
    22. {
    23. //递归下去
    24. if(!dfs(j, 3 - color)) return false;//如果当前是3-2=1,则下一次是3-1=2,以此类推,奇数和偶数的点颜色不一样
    25. }
    26. //如果该点有颜色,则判断该点的颜色是否跟邻接表的头点颜色相同,相同则说明矛盾
    27. else if(st[j] == color) return false;
    28. }
    29. return true;
    30. }
    31. int main()
    32. {
    33. int n, m;
    34. scanf("%d%d", &n, &m);
    35. memset(h, -1, sizeof h);
    36. while (m --)
    37. {
    38. int a, b;
    39. scanf("%d%d", &a, &b);
    40. add(a, b), add(b,a); // 无向图,a->b, b->a
    41. }
    42. bool flag = true;
    43. for(int i = 1; i <= n; i ++)
    44. {
    45. if(!st[i])
    46. {
    47. if(!dfs(i, 1))//如果返回FALSE,则说明有矛盾发生,flag赋为FALSE
    48. {
    49. flag = false;
    50. break;
    51. }
    52. }
    53. }
    54. if(flag) printf("Yes\n");
    55. else printf("No\n");
    56. return 0;
    57. }

  • 相关阅读:
    docker搭建mysql环境
    vue+springboot的登录图片验证码(前端对接报错)
    pc端 复制到剪切板
    51单片机APP GSM短信老人跌倒定位温度异常报警检测GPS地图
    《游戏编程模式》学习笔记(十三)组件模式 Component
    C++(11):tuple
    【微服务】Feign远程调用和异步调用请求头丢失问题
    计算机操作系统 第六章:输入输出系统(1)
    Graph (discrete mathematics)
    初级算法_字符串 --- 最长公共前缀
  • 原文地址:https://blog.csdn.net/qq_63610563/article/details/134090038