c_cpp 二分检查

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 二分检查相关的知识,希望对你有一定的参考价值。

vector<vi> g;
int V;

bool isBipartiteUtil(int s, vi &color) {
  queue<int> q;
  q.push(s);
  color[s] = 0;
  while (!q.empty()) {
    int u = q.front();
    q.pop();
    for (auto v : g[u]) {

      // if self-edges are possible, and not allowed
      if (u == v)
        return false;

      // if have not assigned a color, assign and push onto queue
      if (color[v] == -1)
        color[v] = 1 - color[u], q.push(v);
      // if color is assigned, and it matches the color of our adjacent parent,
      // not bipartite
      else if (color[v] == color[u])
        return false;
    }
  }
  return true;
}

// Works for graphs that may not be strongly connected
bool isBipartite() {
  vi color(V, -1);
  for (int i = 0; i < V; i++) {
    if (color[i] == -1) {
      if (!isBipartiteUtil(i, color))
        return false;
    }
  }
  return true;
}

以上是关于c_cpp 二分检查的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp FindKClosestElements,二分查找

c_cpp SearchInRange,二分查找

c_cpp FindAPeakElement,二分查找

c_cpp 平方根,二分查找

c_cpp 【分治法】二分搜索技术【2.3】

c_cpp 二分搜索是所有以比较为基础的搜索算法时间复杂度最低的算法。用二叉树描速二分查找算法,最坏情况下与二叉树的最高阶相同。比较二叉树线性查找也可用二叉树表示,最坏情况下比较次数为数组元素数量。任