URAL 1080 Map Colouring [简单DFS]

来源:互联网 发布:python教学视频哪个好 编辑:程序博客网 时间:2024/06/03 20:49

题意:给定一个地图,有若干国家,有两种颜色,要求相邻国家的着色不同,确定方案。

思路:按要求第一个国家为X=0,则其相邻国家为1-X,若与先前矛盾则输出-1,注意相邻判断结束,将其边断开,以免干扰下次搜索。

#include <string.h>#include <iostream>using namespace std;#define MAX 100int map[MAX][MAX];int color[MAX];bool f;int n;void dfs(int x,int c){    if(f) return;    if(color[x]!=2){        if(color[x]==c) return;        else{            f=true;            return;        }    }    color[x]=c;    for(int i=0;i<n;i++){        if(map[i][x]){            map[i][x]=map[x][i]=0;            dfs(i,1-c);        }    }}int main(){    while(cin>>n){        memset(map,0,sizeof(map));        f=false;        for(int i=0;i<n;i++){            color[i]=2;            int t;            while(cin>>t&&t)                map[t-1][i]=map[i][t-1]=1;        }        for(int i=0;i<n;i++)            if(color[i]==2) dfs(i,0);        if(!f){            for(int i=0;i<n;i++)                cout<<color[i];            cout<<endl;        }        else cout<<"-1"<<endl;    }    return 0;}/*测试:Sample Input32 03 00Sample Output010*/


 

原创粉丝点击