BFS黑白染色

来源:互联网 发布:科讯cms标签 编辑:程序博客网 时间:2024/05/16 23:48

有一个小技巧,每次开始时先把根节点放进队列中,第一层循环循环层数,令k=q.size(),第二层循环从0到k每次pop()一个,在第二层循环完成之前,所有pop()出的点都是属于同一层。

int f(int u){    queue<int> q;    q.push(u);    int index=1;    vis[u]=index;    while(!q.empty()){        index^=3;        int k=q.size();        for(int i=0;i<k;i++) {            int x=q.front();q.pop();            for(int i=0;i<edges[x].size();i++){                if(!vis[ edges[x][i] ]) {                    vis[ edges[x][i] ]=index;                    q.push(edges[x][i]);                }else if(vis[edges[x][i]]==vis[x]) return -1;            }        }    }}----------int main(){    for(int i=1;i<=n;i++){        if(!vis[i]) {            int u=f(i);            if(u==-1) {                printf("Impossible");                return 0;            }        }    }}
0 0
原创粉丝点击