最大团问题--优先队列式分支界限法
来源:互联网 发布:上海口腔科排名 知乎 编辑:程序博客网 时间:2024/05/20 14:25
#include <iostream>
#include <algorithm>
#include <vector>
#include <cassert>
using namespace std;
typedef struct Node{
int choose;
int cn;
int un;
int level;
Node *pre;
}Node;
const int n = 100;
int graph[n+1][n+1] = {0};
int bestx[n+1] = {0};
int max_node = 0;
vector<Node *> heap;
void initParament()
{
}
bool compareNode(Node *node1, Node *node2)
{
return node1->un > node2->un;
}
void insertNode(int cn, int un, Node *parent, int level, int choose)
{
Node *new_node = new Node;
new_node->cn = cn;
new_node->un = un;
new_node->level = level;
new_node->choose = choose;
new_node->pre = parent;
heap.push_back(new_node);
push_heap(heap.begin(), heap.end(), compareNode);
}
void deleteNode(Node **current)
{
if(heap.empty()){
return;
}
pop_heap(heap.begin(), heap.end(), compareNode);
current = &(*heap.rbegin());
heap.erase(heap.end()-1);
}
void maxClique()
{
Node *current = NULL;
int current_node = 0;
int i = 1;
while( i != n+1 ){
Node *node = current;
bool OK = true;
for(int j=i-1; j>0; j--){
assert(node);
if(node->choose && graph[i][j]==0){
OK = false;
break;
}
node = node->pre;
}
if( OK ){
max_node = max(max_node, current->cn+1);
insertNode(current_node+1, current_node+n-i+1, current, i+1, true);
if(current_node + n-i >= max_node){
insertNode(current_node, current_node+n-i, current, i+1, false);
}
deleteNode(¤t);
assert(current);
i = current->level;
current_node = current->cn;
}
}
for(i=n; i>0; i--){
bestx[n] = current->choose;
current = current->pre;
}
}
int main()
{
initParament();
maxClique();
return 0;
}
- 最大团问题--优先队列式分支界限法
- 装载问题--优先队列式分支界限法
- 最短路径--优先队列式分支界限法
- 优先队列式分支界限法之装载问题
- 优先队列式分支界限法之01背包问题
- 背包问题-优先对列式分支界限法
- 装载问题--队列式分支界限法
- 布线问题--队列式分支界限法
- 队列式分支界限法之装载问题
- 分支限界法之最大团问题
- 单元最短路径问题 分支界限法
- 算法java实现--分支限界法--最大团问题
- 最大团问题-分支限界算法
- (Java)分支界限法求解背包问题
- 分支界限法 任务分配问题
- 分支界限法 旅行商问题
- 算法复习:最大团问题(回溯法和分支限界法)
- 0037算法笔记——【分支限界法】最大团问题
- 甲方乙方
- sql优化之:改善SQL语句(系列三)
- javascript Ext 参考网页
- sql 优化之:实现小数据量和海量数据的通用分页显示存储过程(系列四)
- Ubuntu 下 Netbeans 键盘失效 - Java Swing Bug
- 最大团问题--优先队列式分支界限法
- sql 优化之:聚集索引的重要性和如何选择聚集索引(系列五)
- 自定义确认窗口 类似confirm
- poj 1308 他四叔么? BFS+模拟
- 改变可以改变,接受不能改变
- 数据库设计规范与技巧系列
- 50种巧妙优化SQL Server数据库的方法
- 云导论
- 【软件性能测试-LoadRunner实战技能 2】== LoadRunner中winsocket协议学习