弦图判断
来源:互联网 发布:ubuntu 无法复制 编辑:程序博客网 时间:2024/04/29 16:49
ACM模版
弦图判断
/* * 弦图判断 * INIT: g[][]置为邻接矩阵; * CALL: mcs(n); peo(n); * 第一步: 给节点编号 mcs(n) * 设已编号的节点集合为A, 未编号的节点集合为B * 开始时A为空, B包含所有节点. * for num=n-1 downto 0 do { * 在B中找节点x, 使与x相邻的在A集合中的节点数最多, * 将x编号为num,并从B移入A。 * } * 第二部:检查peo(n) * for num=0 to n-1 do { * 对编号为num的点x,设所有编号>num且与x相邻的点集为C * 在C中找出编号最小的节点y, * 若C中存在x != y,使得y与x之间无边,则此图不是弦图。 * } * 检查完毕, 则此图是弦图. */const int V = 10010;int g[V][V], order[V], inv[V], tag[V];void mcs(int n){ int i, j, k; memset(tag, 0, sizeof(tag)); memset(order, -1, sizeof(order)); for (i = n - 1; i >= 0; i--) { // vertex:0~n-1 for (j = 0; order[j] >= 0; j++); for (k = j + 1; k < n; k++) { if (order[k] < 0 && tag[k] > tag[j]) { j = k; } } order[j] = i, inv[i] = j; for (k = 0; k < n; k++) { if (g[j][k]) { tag[k]++; } } } return ;}int peo(int n){ int i, j, k, w, min; for (i = n - 2; i >= 0; i--) { j = inv[i], w = -1, min = n; for (k = 0; k < n; k++) { if (g[j][k] && order[k] > order[j] && order[k] < min) { min = order[k], w=k; } } if (w < 0) { continue; } for (k = 0; k < n; k++) { if (g[j][k] && order[k] > order[w] && !g[k][w]) { return 0; // no } } } return 1; // yes}
0 0
- 弦图判断
- 弦图判断
- 弦图判断
- 弦图判断
- zoj 1015 弦图判断
- ZOJ 1015 弦图的判断
- [ZOJ1015]Fishing Net 弦图判断
- [ZOJ1015]Fishing Net-弦图判断
- 二分图判断
- 二部图判断
- 判断二分图
- 判断图的连通性
- 图判断有无环
- iOS 判断gif图
- 二分图判断
- 二分图的判断
- 图的连通性判断
- 判断二分图 bfs
- Ubuntu下lamp环境搭建【学习笔记】
- 对vector等STL容器进行排序
- 进程间通信messager
- Swift 类和结构体总结
- oracle基础复习-2016.7.18
- 弦图判断
- iOS开发-搜索栏UISearchBar和UISearchController
- 在并发任务间交换数据-生产消费者3
- 27 二叉搜索树与双向链表
- Python基本语法_基本数据类型_序列类型详解
- LeetCode 374. Guess Number Higher or Lower
- CSS3实现手机网页3D切换效果
- UVA 11889 - Benefit
- Android制作引导页和启动页