zoukankan      html  css  js  c++  java
  • 二分图判定(图论基础)

    哇咔咔,终于开始接触图论了,心情有点小激动;

    例题的大概意思就是问是否最多用两种颜色进行染色?

    下面的第一个代码针对的是连通图:

     1 #include<iostream>
     2 #include<vector>
     3 #include<cstdio>
     4 using namespace std;
     5 vector<int>G[1000];
     6 int color[1000] = { 0 };
     7 bool solve(int v, int c)
     8 {
     9     color[v] = c;
    10     for (int i = 0; i < G[v].size(); i++)
    11     {
    12         if (color[G[v][i]] == c) return false;
    13         if (color[G[v][i]] == 0 && !solve(G[v][i], -c)) return false;
    14     }
    15     return true;
    16 }
    17 int main()
    18 {
    19     int V, E;
    20     scanf("%d",&E);
    21     for (int i = 0; i < E; i++)
    22     {
    23         int s, t;
    24         scanf("%d%d", &s, &t);
    25         G[s].push_back(t);
    26     }
    27     cout << solve(0, 1) << endl;
    28     return 0;
    29 }

    就是根据dfs的思路进行标记和判定

    如果不是连通图的话,可以通过循环遍历来进行判断

  • 相关阅读:
    cookie,session,django中间件,csrf回顾
    CSRF
    django中间件
    cookie与session
    form组件简单回顾
    分页器组件与form组件
    ajax回顾
    AJAX
    python魔法方法详解
    python静态方法类方法属性方法
  • 原文地址:https://www.cnblogs.com/kangdong/p/8820016.html
Copyright © 2011-2022 走看看