NYOJ1015---二部图(判断是否是二分图:染色法)
2017-08-02 12:30
363 查看
【题目来源】:http://acm.nyist.net/JudgeOnline/problem.php?pid=1015
【题意】
给出n个点,表述了m组的点与点的关系,问是否能够分成两部分,每一部分的点都与同一部分的其他点相互之间不存在关系。
【思路】
这种题采用染色法,大致描述一下染色法,在我用二维矩阵存下点与点的关系后,我会给每一个点上色(0或者1),基本上是从第一个点开始,然后如果与它相连的点都会被染成与第一个点不一样的颜色, 但是如果在这些点里,有的已经被染过,那么就要判断是否和第一个点对应,若相同, 说明不可以分成二分图,若是之前没有赋过值,那么就先赋上,然后以该点为起始点,找与它相连的所有点,就这样一直递归下去,这就是染色法。
【代码】
【题意】
给出n个点,表述了m组的点与点的关系,问是否能够分成两部分,每一部分的点都与同一部分的其他点相互之间不存在关系。
【思路】
这种题采用染色法,大致描述一下染色法,在我用二维矩阵存下点与点的关系后,我会给每一个点上色(0或者1),基本上是从第一个点开始,然后如果与它相连的点都会被染成与第一个点不一样的颜色, 但是如果在这些点里,有的已经被染过,那么就要判断是否和第一个点对应,若相同, 说明不可以分成二分图,若是之前没有赋过值,那么就先赋上,然后以该点为起始点,找与它相连的所有点,就这样一直递归下去,这就是染色法。
【代码】
#include<map> #include<string> #incl 4000 ude<iostream> #include<cstdio> #include<cstring> #include<queue> #include<algorithm> using namespace std; typedef long long LL; int n,m; int relax[210][210]; int color[210]; bool check(int pos,int col)//染色法模板 { color[pos]=col; for(int i=0;i<n;i++) { if(relax[pos][i]) { if(color[i]!=-1) { if(color[i]==col) { return 0; } } else if(!check(i,!col)) return 0; } } return 1; } int main() { while(~scanf("%d%d",&n,&m)) { memset(relax,0,sizeof(relax)); while(m--) { int x,y; scanf("%d%d",&x,&y); relax[x][y]=relax[y][x]=1; } memset(color,-1,sizeof(color)); if(check(0,1)) { printf("BICOLORABLE.\n"); } else { printf("NOT BICOLORABLE.\n"); } } }
相关文章推荐
- NYOJ1015 二部图(染色法判断二分图)
- SRM 593 Div1 L1:HexagonalBoard,用染色法判断无向图是否为二分图
- nyoj 1015 二分图判断
- 【BFS、二分图判断】二部图NYOJ1015
- 染色法判断是否是二分图 hdu2444
- 【BFS、二分图判断】二部图NYOJ1015
- NYOJ 题目1015 二部图(染色法判二分图)
- 判断二分图 染色法 NYOJ 1015
- 二分图判断(+最大匹配)NYOJ 1015+239 HDU 2444
- SRM 593 Div1 L1:HexagonalBoard,用染色法判断无向图是否为二分图
- poj 3342 Party at Hali-Bula 判断二分图最大点独立集是否唯一
- 南阳理工1015 (染色法判断二分图)
- UVA 10004判断一个图是否为二分图
- nyoj-1015-二分图判定
- nyoj311完全背包【完全背包+判断是否装满】
- 如何判断一个图是否是二分图
- atcoder/CODE FESTIVAL 2017 qual B/B(dfs染色判断是否为二分图)
- HDU 2444 The Accomodation of Students (二分图匹配+匈牙利算法+bfs判断是否为二分图)
- hdu 2444 The Accomodation of Students (判断是否是二分图,最大匹配)
- 判断图是否是二分图