首页 > 代码库 > 黑白染色

黑白染色

#include <iostream>
using namespace std;
#define SIZE 100
int map[SIZE][SIZE];
int queue[SIZE];
int color[SIZE];
int visit[SIZE];
int m,n;
int tab;
int ans;
int temp;
int x,y;
void BFS(int step)
{
    int head = 0;
    int tail = 1;
    queue[head] = step;
    color[step] = 1;
    visit[step] = 1;
    while(head != tail)
    {
        temp = queue[head];
        head++;
        for(int j=1;j<=m;j++)
        {
            tab = 0;
            if(map[temp][j]==1)
            {
                if(color[j]==0)
                {
                    color[j] -= color[temp];
                    visit[j] = 1;
                    queue[tail] = j;
                    tail++;
                }
                else if(color[j] == color[temp])
                {
                    tab = 1;
                    ans = -1;
                    break;
                }
            }
        }
        if(tab==1) break;
    }
}

int main()
{
    freopen("input.txt","r",stdin);
    int ntc;
    cin>>ntc;
    for(int i=0;i<ntc;i++)
    {
        ans = 0;
        cin>>m;
        cin>>n;
        for(int i=0;i<n;i++)
        {
            cin>>x;
            cin>>y;
            map[x][y] = 1;
            map[y][x] = 1;
        }
        for(int i=1;i<=m;i++)
        {
            if(visit[i]==0)
                BFS(i);
            if(tab==1) 
                break;
        }
        if(ans==0)
        {
            for(int i=0;i<=m;i++)
            {
                if(color[i] == -1)
                    ans++;
            }
            cout<<ans<<endl;
            for(int i=0;i<=m;i++)
            {
                if(color[i] == -1)
                    cout<<i;
            }
            cout<<endl;
        }
        else
            cout<<ans<<endl;
    }
    return 0;
}

input:
9
5 5
1 2 2 3 3 4 4 5 5 1
6 6
1 2 2 3 3 4 4 5 5 6 6 1
4 5
1 2 2 3 3 4 4 1 4 2
4 6
1 2 2 3 3 4 4 1 4 2 1 3
4 4
1 2 2 3 3 4 4 1
5 6
1 2 1 4 2 3 2 5 3 4 5 4 
12 13
1 2 1 4 2 3 3 4 4 5 5 6 6 7 7 8 8 5 5 9 4 10 9 10 11 12
5 4
1 4 1 3 3 5 2 5
7 5
1 4 1 3 3 5 2 5 6 7

 

黑白染色