最近研究二分图判断,稍微总结一下,以后继续补充:
题意:判断一个图是不是为二分图。
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1829
——>>直接dfs。
#include<cstdio> #include<cstring> #include<vector> using namespace std; const int maxn = 2000 + 10; int color[maxn], n, m; bool vis[maxn]; vector<int> G[maxn]; bool dfs(int u) //判断u的在的连通分支是不是为二分图 { vis[u] = 1; int i, len = G[u].size(); for(i = 0; i < len; i++) { int v = G[u][i]; if(color[u] == color[v]) return false; if(!color[v]) { color[v]= 3 - color[u]; if(!dfs(v)) return false; } } return true; } int main() { int cnt = 1, T, i, x, y; scanf("%d", &T); while(T--) { scanf("%d%d", &n, &m); for(i = 0; i <= n; i++) G[i].clear(); for(i = 1; i <= m; i++) { scanf("%d%d", &x, &y); G[x].push_back(y); G[y].push_back(x); } memset(color, 0, sizeof(color)); memset(vis, 0, sizeof(vis)); printf("Scenario #%d:\n", cnt++); bool ok = 1; for(i = 1; i <= n; i++) { if(!vis[i]) { color[i] = 1; if(!dfs(i)) { ok = 0; break; } } } if(ok) printf("No suspicious bugs found!\n\n"); else printf("Suspicious bugs found!\n\n"); } return 0; }
文章结束给大家分享下程序员的一些笑话语录: 3G普不普及现在已经不是看终端了,而是看应用,有好的,便宜实用的应用,花1000多买个能用的智能手机应该不是什么难事。反过来说,你200元拿一个智能手机,没有好的应用,看个电影要几十元,也是没人用3G。
---------------------------------
原创文章 By
二分图和判断
---------------------------------