UVa10004 Bicoloring (dfs水题)

来源:互联网 发布:仁和知柏地黄丸 编辑:程序博客网 时间:2024/05/18 02:15

这个题目的意思就是用两个颜色给图中每个点涂色,使相邻的点颜色不同。如果能有一个这样的方案,那么就输出"BICOLORING." 否则输出"NOT BICOLORING."。 数据规模是n最大为200.很典型的搜索题目

代码如下:

#include <cstdio>#include <cstring>const int N = 210;int n, l, map[N][N];int vis[N];bool dfs( int x ) {    for ( int i = 0; i < n; ++i ) {        if ( map[x][i] ) {            if ( !vis[i] ) {                vis[i] = 3 - vis[x];                if (!dfs(i)) return false;            }            else if ( vis[i] == vis[x] ) return false;        }    }    return true;}    int main(){    while ( scanf("%d", &n ) != EOF && n ) {        scanf("%d",&l);        memset(map, 0, sizeof(map));        while ( l-- ) {            int a, b;            scanf("%d%d", &a, &b);            map[a][b] = map[b][a] = 1;        }        memset( vis, 0, sizeof(vis));        vis[0] = 1;        if ( dfs(0) ) printf("BICOLORABLE.\n");        else printf("NOT BICOLORABLE.\n");    }}