您的位置:首页 > 编程语言 > PHP开发

URAL 1080 Map Colouring [简单DFS]

2011-09-21 11:06 387 查看
题意:给定一个地图,有若干国家,有两种颜色,要求相邻国家的着色不同,确定方案。

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

#include <string.h>
#include <iostream>
using namespace std;
#define MAX 100
int 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 Input
3
2 0
3 0
0
Sample Output
010
*/


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ini output input 测试 c