编程算法 - 二部图确定 代码(C)
2015-07-23 15:53
260 查看
二部图确定 代码(C)
本文地址: http://blog.csdn.net/caroline_wendy题目: 给定一个具有n个顶点的图. 要给图上每一个顶点染色, 而且要使相邻的顶点颜色不同.
能否最多用2种颜色进行染色. 没有重边和闭环.
即二分图问题.
使用深度优先搜索(dfs), 把顶点染成c, 然后相邻边染成-c.
假设相邻边被染色过, 且同样, 则图不是二分图; 假设全部边都被染色, 而且互不同样, 则是二分图.
进行多次搜索, 避免非连通图.
代码:
/* * CppPrimer.cpp * * Created on: 2014.7.27 * Author: Caroline */ /*eclipse cdt*/ #include <stdio.h> #include <vector> using namespace std; class Program { static const int MAX_V = 100; /*vector<int> G[MAX_V] = {{1,3}, {0,2}, {1,3}, {0,2}}; int V = 4;*/ vector<int> G[MAX_V] = {{1,2}, {0,2}, {0,1}}; int V = 3; int color[MAX_V] = {0}; bool dfs(int v, int c) { color[v] = c; for (size_t i=0; i<G[v].size(); ++i) { if (color[G[v][i]] == c) return false; if (color[G[v][i]] == 0 && !dfs(G[v][i], -c)) return false; } return true; } public: void solve() { for (int i=0; i<V; i++) { if (color[i] == 0) { if(!dfs(i,1)) { printf("result = No\n"); return; } } } printf("result = Yes\n"); } }; int main (void) { Program iP; iP.solve(); return 0; }
输出:
result = No
相关文章推荐
- python- shutil 高级文件操作
- Json概述以及python对json的相关操作《转》
- 学习javaWeb开发-Servlet
- 合并排序的递归实现
- Java学习总结:反射机制
- C#中ArrayList类的使用
- C#中ArrayList类的使用
- Python学习笔记(三)------列表
- 如何配置Eclipse实现定制登录界面
- 读书笔记MoreEffectiveC++(6)
- 编写前n项阶乘之和.java
- 基于Eclipse构建Hadoop源码阅读环境
- JAVA 并发编程-线程范围内共享变量(五)
- Matlab分析证券相关系数
- 图片的缩放源代码与使用
- java 注解2
- 在Windows下编写并运行第一个ASP.NET 5 Preview Web API程序
- myeclipse 10创建maven项目(java、javaweb类型)
- java 注解
- C++ auto 与 register、static 关键字 浅析