ural 1080. Map Coloring

图的染色问题,类似二分图的染色问题。其实这题就是问你能不能类似二分图一样把图染成两个颜色,而且相邻顶点颜色不一样。

 

直接DFS。。。没啥好说的。如果遇到不合适的,输出-1.

 

#include <stdio.h> #include <stdlib.h> #include <iostream> using namespace std; const int MAX = 110; int n; bool map[MAX][MAX]; int c[MAX]; bool used[MAX]; bool flag; void DFS(int x) { used[x] = 1; for(int i=1; i<=n; i++) { if( x == i ) continue; if( map[x][i] && c[i] && c[i] + c[x] != 0 ) { flag = true; return; } if( map[x][i] && !c[i] && !used[i] ) { if( c[x] == 1 ) c[i] = -1; else c[i] = 1; DFS(i); if( flag ) return ; } } } int main() { int t; memset(c,0,sizeof(c)); memset(map,false,sizeof(map)); scanf("%d",&n); for(int i=1; i<=n; i++) while( scanf("%d",&t) && t ) map[i][t] = map[t][i] = 1; flag = 0; for(int i=1; i<=n && !flag; i++) { if( !used[i] ) c[i] = 1; DFS(i); } if( flag ) printf("-1/n"); else { for(int i=1; i<=n; i++) if( c[i] == 1 ) printf("0"); else printf("1"); printf("/n"); } return 0; }  

你可能感兴趣的:(ural 1080. Map Coloring)