[leetcode]图算法之二分图染色法/BFS的运用785. Is Graph Bipartite?

图算法之二分图染色法/BFS的运用

  • 题目
  • 解析
  • 答案

题目

leetcode入口

解析

二分图,其实就是把点分成两个集合
使用BFS,相邻曾的节点属于不同的集合,如果在BFS的过程中遇到了之前访问过的节点,就说明不能分成两个集合

答案

//BFS
class Solution {
public:
    bool isBipartite(vector<vector<int>>& graph) {
        vector<int> colors(graph.size(),0);
        
        queue<int> q;
        while(!q.empty()){
            q.pop();
        }
        
        for(int i=0;i<graph.size();i++){
            if(colors[i]) continue;
            
            colors[i]=1;
            
            q.push(i);
            
            while(!q.empty()){
                int t=q.front(); q.pop();
                
                for(int i=0;i<graph[t].size();i++){
                    int j=graph[t][i];
                    
                    if(colors[j]==colors[t]) return false;
                    if(colors[j]) continue;
                    
                    colors[j]=colors[t]*(-1);
                    
                    q.push(j);
                }
            }
        }
        return true;
    }
};

你可能感兴趣的:(leetcode,图)