public class BiggestTuan {
private int bound = 0;
public int getBound() {
return bound;
}
public void biggerstTuan(boolean table[][], int k, int total, int n){
//到达叶节点
if (k == n){
if (total > bound){
bound = total;
}
return;
}
//如果在团中,则加入顶点
if (isInTuan(k,table)){
//如果代价函数大于界(bound),则继续
if (total + n - k > bound){
//加入顶点
total++;
k++;
biggerstTuan(table,k,total,n);
k--;
total--;
//不加入顶点
k++;
if (total + n - k > bound){
biggerstTuan(table,k,total,n);
}
k--;
}else {
//不加入顶点
k++;
if (total + n - k > bound){
biggerstTuan(table,k,total,n);
}
k--;
}
}else {
//不加入顶点
k++;
if (total + n - k > bound){
biggerstTuan(table,k,total,n);
}
k--;
}
}
public boolean isInTuan(int k,boolean[][] table){
for (int i = 1; i <= k; i++) {
if (!table[k][i])
return false;
}
return true;
}
public static void main(String[] args) {
boolean[][] table = new boolean[6][6];
for (int i = 0; i < table.length; i++) {
table[i][i] = true;
}
table[1][2] = true;
table[1][3] = true;
table[1][4] = true;
table[1][5] = true;
table[2][1] = true;
table[2][4] = true;
table[3][1] = true;
table[3][4] = true;
table[3][5] = true;
table[4][1] = true;
table[4][2] = true;
table[4][3] = true;
table[4][5] = true;
table[5][1] = true;
table[5][3] = true;
table[5][4] = true;
BiggestTuan biggestTuan = new BiggestTuan();
biggestTuan.biggerstTuan(table, 0, 0, 5);
System.out.println(biggestTuan.getBound());
}
}
根据分支限界思想,使用java实现最大团问题
最新推荐文章于 2023-01-28 20:32:47 发布