1080. Map Coloring

http://acm.timus.ru/problem.aspx?space=1&num=1080

dfs 水题不解释

#include <iostream>

#include <cstdio>

#include <cstring>

#include <algorithm>



#define LL long long



using namespace std;



const int N=103;

int head[N];

struct node

{

    int j,next;

}side[N*N];

int I;

int ans;

int color[N];

void build(int i,int j)

{

    side[I].j=j;

    side[I].next=head[i];

    head[i]=I++;

}



void dfs(int x,int k)

{

    if(color[x]!=-1)

    {

        if(color[x]!=k)

        ans=-1;

        return ;

    }

    color[x]=k;

    for(int t=head[x];t!=-1;t=side[t].next)

    {

        int l=side[t].j;

        dfs(l,(k?0:1));

        if(ans==-1)

        return ;

    }

}

int main()

{

    //freopen("data.txt","r",stdin);

    int n;

    while(scanf("%d",&n)!=EOF)

    {

        memset(head,-1,sizeof(head));

        I=0;

        for(int i=1;i<=n;++i)

        {

            int j;

            while(scanf("%d",&j),j)

            {

                build(i,j);

                build(j,i);

            }

        }

        ans=0;

        memset(color,-1,sizeof(color));

        dfs(1,0);

        if(ans==-1)

        {printf("-1\n");continue;}

        for(int i=1;i<=n;++i)

        printf("%d",color[i]);

        printf("\n");

    }

    return 0;

}

 

你可能感兴趣的:(color)