uva 10004 Bicoloring(判断一个图是否是二分图)
2015-06-29 15:33
621 查看
BFS与DFS两种实现:(邻接矩阵存图)
#include<cstdio> #include<cstring> #include<iostream> #include<queue> using namespace std; int col[205],n,m; bool map[205][205],flag; bool bfs(int s) { queue<int>q; q.push(s); col[s]=1; int i; while(!q.empty()) { int p=q.front(); q.pop(); for(i=1;i<=n;++i) { if(map[p][i]&&col[i]==-1) { q.push(i); col[i]=!col[p]; } else if(map[p][i]&&col[p]==col[i]) return 0; } } return 1; } int main() { int i; while(scanf("%d",&n)!=EOF&&n>0) { scanf("%d",&m); memset(map,0,sizeof(map)); memset(col,-1,sizeof(col)); for(i=1;i<=m;++i) { int x,y; scanf("%d %d",&x,&y); map[x][y]=map[y][x]=1; } flag=1; for(i=0;i<n;++i) if(col[i]==-1&&!bfs(i)) { flag=0; break; } if(flag) puts("BICOLORABLE."); else puts("NOT BICOLORABLE."); } return 0; }
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int M[205][205],color[205],n; bool bi(int u){ for(int i=0;i<n;++i){ if(M[u][i]){ if(!color[i]) { color[i]=3-color[u]; if(!bi(i)) return 0; } else if(color[i]==color[u]) return 0; } } return 1; } int main() { int i,m,x,y; while(~scanf("%d",&n)&&n){ scanf("%d",&m); memset(M,0,sizeof(M)); for(i=0;i<m;++i) { scanf("%d%d",&x,&y); M[x][y]=M[y][x]=1; } memset(color,0,sizeof(color)); bool flag=1; for(i=0;i<n&&flag;++i) if(!color[i]){ color[i]=1; if(!bi(i)) flag=0; } if(flag) puts("BICOLORABLE."); else puts("NOT BICOLORABLE."); } return 0; }
相关文章推荐
- MySQL学习系列11:触发器
- 双向循环链表(c++实现)
- json学习系列(1)-使用json所要用到的jar包下载
- D3.js中对array的使用
- 各种语言调试小招
- 欢迎使用CSDN-markdown编辑器
- android 画画板
- 如何在centos安装python-mysql
- android.intent.action.MAIN 与 android.intent.category.LAUNCHER
- web前端学习之HTML CSS/javascript之一
- Edit Distance——经典的动态规划问题
- 各种语言使用HTTP Request
- [LintCode] 最长上升子序列
- svn分支合并
- 胜者树与败者树
- IBM X3650 服务器使用SERVERAID 8K-1做RAID1更换硬盘
- B\S备忘录18——cas连接数据库
- 如何传输SE63的翻译内容
- Java中值与引用
- iOS页面间传值的方式(Delegate/NSNotification/Block/NSUserDefault/单例)