• 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;
        }
    };
    每天进步一点点~
  • 相关阅读:
    Python之数学(math)和随机数(random)
    《图解HTTP》读书笔记
    leetcode1008
    leetcode1007
    leetcode1006
    leetcode1005
    leetcode218
    leetcode212
    leetcode149
    leetcode140
  • 原文地址:https://www.cnblogs.com/libin123/p/14615961.html
Copyright © 2020-2023  润新知