uva 10004 Bicoloring(判断一个图是否是二分图)

来源:互联网 发布:教师网络学平台登录 编辑:程序博客网 时间:2024/04/29 02:26

BFS与DFS两种实现:(邻接矩阵存图)

#include<cstdio>#include<cstring>#include<iostream>#include<queue>using namespace std;int col[205],n,m;bool map[205][205],flag;bool bfs(int s){    queue<int>q;    q.push(s);    col[s]=1;    int i;    while(!q.empty())    {        int p=q.front();        q.pop();        for(i=1;i<=n;++i)        {            if(map[p][i]&&col[i]==-1)            {                q.push(i);                col[i]=!col[p];            }            else if(map[p][i]&&col[p]==col[i]) return 0;        }    }    return 1;}int main(){    int i;    while(scanf("%d",&n)!=EOF&&n>0)    {        scanf("%d",&m);        memset(map,0,sizeof(map));        memset(col,-1,sizeof(col));        for(i=1;i<=m;++i)        {            int x,y;            scanf("%d %d",&x,&y);            map[x][y]=map[y][x]=1;        }        flag=1;        for(i=0;i<n;++i)            if(col[i]==-1&&!bfs(i))            {                flag=0;                break;            }        if(flag) puts("BICOLORABLE.");        else puts("NOT BICOLORABLE.");    }    return 0;}



#include<iostream>#include<cstdio>#include<cstring>using namespace std;int M[205][205],color[205],n;bool bi(int u){    for(int i=0;i<n;++i){        if(M[u][i]){            if(!color[i])            {                color[i]=3-color[u];                if(!bi(i)) return 0;            }            else if(color[i]==color[u]) return 0;        }    }    return 1;}int main(){    int i,m,x,y;    while(~scanf("%d",&n)&&n){        scanf("%d",&m);        memset(M,0,sizeof(M));        for(i=0;i<m;++i) {            scanf("%d%d",&x,&y);            M[x][y]=M[y][x]=1;        }        memset(color,0,sizeof(color));        bool flag=1;        for(i=0;i<n&&flag;++i)            if(!color[i]){                color[i]=1;                if(!bi(i)) flag=0;            }        if(flag) puts("BICOLORABLE.");        else puts("NOT BICOLORABLE.");    }    return 0;}



0 0
原创粉丝点击