leetcode 785 判断二分图

每次从一个未染色的节点出发,把与他相邻的未染色的节点染成相反的颜色,如果相邻节点已经被染色且颜色和他一致则返回false   全部染完且没报错则是二分图   另外主要注意非连通图的问题,需要多次从没染色的开始染色,防止出现某个子连通图不是二分图,二分图要求所有的连通图也全都是二分图

class Solution {
public:
    bool isBipartite(vector<vector<int>>& graph) {
        int nums=graph.size();
         struct Node{
            int no=0;
            int color=0;
        };
        queue<Node> q;
        Node nodes[nums];
        for(int i=0;i<nums;i++)
        {
            if(nodes[i].color==0)
            {
                nodes[i].color=1;
                nodes[i].no=i;        //记得给初始节点no赋值 否则一直为0
                q.push(nodes[i]);
                while(!q.empty())
                {
                    Node top=q.front();
                    q.pop();
                    vector<int> edges=graph[top.no];
                    for(int i=0;i<edges.size();i++)
                    {
                        if(nodes[edges[i]].color==0)
                        {
                            nodes[edges[i]].color=(-top.color);
                            nodes[edges[i]].no=edges[i];  //记得赋值
                            q.push(nodes[edges[i]]);
                        }
                        if(nodes[edges[i]].color==top.color)
                        {
                            return false;
                        }
                    }
                }
            }
        } 
        return true;
    }
};
每天进步一点点~
原文地址:https://www.cnblogs.com/libin123/p/14615961.html