当前位置: 首页 > news >正文

茂名网站建设咨询公司网站代码模板下载

茂名网站建设咨询,公司网站代码模板下载,宁波网站建设有限公司,企业网站模板科技感目录 二分图 染色法判定二分图 匈牙利算法 二分图 二分图#xff0c;又叫二部图#xff0c;将所有点分成两个集合#xff0c;使得所有边只出现在集合之间的点之间#xff0c;而集合内部的点之间没有边。二分图当且仅当图中没有奇数环。只要图中环的边数没奇数个数的又叫二部图将所有点分成两个集合使得所有边只出现在集合之间的点之间而集合内部的点之间没有边。二分图当且仅当图中没有奇数环。只要图中环的边数没奇数个数的它就是二分图。二分图可以是连通的也可以是不连通的树一定二分图。 染色法判定二分图 题目如下 如果判断一个图是不是二分图 开始对任意一未染色的顶点染色。判断其相邻的顶点中若未染色则将其染上和相邻顶点不同的颜色。若已经染色且颜色和相邻顶点的颜色相同则说明不是二分图若颜色不同则继续判断。bfs和dfs可以搞定 解题代码 #include iostream #include cstring #include algorithmusing namespace std;const int N 100010 * 2; int e[N], ne[N], idx;//邻接表存储图 int h[N]; int color[N];//保存各个点的颜色0 未染色1 是红色2 是黑色 int n, m;//点和边void add(int a, int b)//邻接表插入点和边 {e[idx] b, ne[idx] h[a], h[a] idx; }bool dfs(int u, int c)//深度优先遍历参数1点的编号 参数2要染的颜色 {color[u] c;//u的点成 c 染色//遍历和 u 相邻的点for(int i h[u]; i! -1; i ne[i]){int b e[i]; if(!color[b])//相邻的点没有颜色,则递归处理这个相邻点{if(!dfs(b, 3 - c)) return false;//3 - 1 2 如果 u 的颜色是2则和 u 相邻的染成 1//3 - 2 1 如果 u 的颜色是1则和 u 相邻的染成 2}else if(color[b] color[b] ! 3 - c)//如果已经染色判断颜色是否为 3 - c{ return false;//如果不是说明冲突返回 }}return true; }int main() {memset(h, -1, sizeof h);//初始化邻接表cin n m;for(int i 1; i m; i)//读入边{int a, b;cin a b;add(a, b), add(b, a);}for(int i 1; i n; i)//遍历点{if(!color[i])//如果没染色{//以没染色的点为起点进行dfs搜索if(!dfs(i, 1))//染色该点并递归处理和它相邻的点{cout No endl;//出现矛盾输出NO return 0;}}}cout Yes endl;//全部染色完成没有矛盾输出YESreturn 0; } 算法板子O(mn)n表示点数m表示边数 int n; // n表示点数 int h[N], e[M], ne[M], idx; // 邻接表存储图 int color[N]; // 表示每个点的颜色-1表示未染色0表示白色1表示黑色// 参数u表示当前节点c表示当前点的颜色 bool dfs(int u, int c) {color[u] c;for (int i h[u]; i ! -1; i ne[i]){int j e[i];if (color[j] -1){if (!dfs(j, !c)) return false;}else if (color[j] c) return false;}return true; }bool check() {memset(color, -1, sizeof color);bool flag true;for (int i 1; i n; i )if (color[i] -1)if (!dfs(i, 0)){flag false;break;}return flag; } 匈牙利算法 题目如下 解题代码 #include cstring #include iostream #include algorithmusing namespace std;const int N 510, M 100010;int n1, n2, m; int h[N], e[M], ne[M], idx; int match[N]; bool st[N];void add(int a, int b) {e[idx] b, ne[idx] h[a], h[a] idx ; }bool find(int x) {for (int i h[x]; i ! -1; i ne[i]){int j e[i];if (!st[j]){st[j] true;if (match[j] 0 || find(match[j])){match[j] x;return true;}}}return false; }int main() {scanf(%d%d%d, n1, n2, m);memset(h, -1, sizeof h);while (m -- ){int a, b;scanf(%d%d, a, b);add(a, b);}int res 0;for (int i 1; i n1; i ){memset(st, false, sizeof st);if (find(i)) res ;}printf(%d\n, res);return 0; } 算法板子O(m*n)n表示点数m表示边数 int n1, n2; // n1表示第一个集合中的点数n2表示第二个集合中的点数 int h[N], e[M], ne[M], idx; // 邻接表存储所有边匈牙利算法中只会用到从第一个集合指向第二个集合的边所以这里只用存一个方向的边 int match[N]; // 存储第二个集合中的每个点当前匹配的第一个集合中的点是哪个 bool st[N]; // 表示第二个集合中的每个点是否已经被遍历过bool find(int x) {for (int i h[x]; i ! -1; i ne[i]){int j e[i];if (!st[j]){st[j] true;if (match[j] 0 || find(match[j])){match[j] x;return true;}}}return false; }// 求最大匹配数依次枚举第一个集合中的每个点能否匹配第二个集合中的点 int res 0; for (int i 1; i n1; i ) {memset(st, false, sizeof st);if (find(i)) res ; }
http://www.hkea.cn/news/14290899/

相关文章:

  • 做网站的去那里接单现在出入河南最新规定
  • wordpress博客站点地图开封seo公司
  • 网站界面设计要素在线域名ip查询
  • 网站设计的文案免费企业网站程序上传
  • 做的很好的网站网站开发会什么软件
  • 镇江企业网站公司企业邮箱注册
  • 湖北华亚建设工程有限公司网站设计公司资质怎么申请
  • 局域网建设网站重视机关网站建设
  • 高端品牌网站建设兴田德润可信赖建设网站制作公司
  • 网站制作成功后怎么使用福田公司董事长
  • 广东省省的建设厅官方网站合肥网站建设企业
  • 俄语网站叫什么yandex网站 中文版与英文版的后台有什么不同
  • 五金机械东莞网站建设做网站不难吧
  • 网站建设中存在的问题都有什么类别的网站
  • 内蒙古 网站建设权威网站
  • 跨境建站平台如皋网站制作
  • 自己制作一个网站网址域名解析
  • 简搜网站提交wordpress 安全插件
  • 古镇高端网站建设成都网站建设 木木科技
  • seo如何做网站建设九州建网站
  • seo整站优化推广尚德建设集团网站
  • 专业制作网站的公司制作自己的网站学校
  • 网站评论 设计wordpress自定义分类面包屑导航
  • 免费建站工具十堰网站建设联系电话
  • 哪个网站做员工增员wordpress站点地图无法读取
  • 大气的网站模板网站前端设计培训
  • 清理空壳网站做视频网站需要什么资质
  • 网站运营推广主要做什么的网站开发公司的职责
  • 网站优化检测工具网站模板建站教程
  • logo免费设计网站如果网站被攻击了