xxxx18一60岁hd中国/日韩女同互慰一区二区/西西人体扒开双腿无遮挡/日韩欧美黄色一级片 - 色护士精品影院www

  • 大小: 5KB
    文件類型: .cpp
    金幣: 1
    下載: 0 次
    發布日期: 2021-05-19
  • 語言: C/C++
  • 標簽: B樹??

資源簡介

B樹,C語言實現,添加到vc6.0中,可以執行的程序。

資源截圖

代碼片段和文件信息

/**
*Data:2011.3.20
*title:base?on?Branch_board?straight?selection
*/

#include?
#include?
#include?
using?namespace?std;

const?int?D=6;???//總特征數
const?int?d=2;???//目標特征數
const?int?inf=100000;???//無窮

int?best[D];????//最好結果,舍棄對應位置為0
int?max;????????//當前最好的結果的可區分性
int?q[D-d+1];?????//后繼節點的個數,即下一層舍去的特征數
int?r[D-d+1];?????//當前特征集合的基數
vector?X;????//當前節點舍棄i個特征后的剩余特征
vector?Q;????//當前節點后繼舍棄的特征
int?l;????????????//當前層數
int?B;????????????//初始界值
int?J[D+1];???????//判據值數組
//任意兩個特征可區分性
const?int?cov[6][6]={
inf13
3inf5
67inf
}


class?BTree{
public:
????BTree*?rchild;????//子節點
????BTree*?lchild;????//左兄弟
????BTree*?parent;????//父節點
????int????????x;????//舍棄的特征
????void?generateChild(BTree?*);
};

void?sortByJudge();?//根據判據值進行排序
int??calJudge(vector?&Q?int?x);?//計算當前節點判據值
void?backUp(BTree?*root);??//回溯
void?updatePath(BTree?*root);
void?addUnion(vector?&srcint?n);??//集合相加
void?subUnion(vector?&fir?vector?&sec);??//集合相減
void?subUnion(vector?&srcint?n);??????//重載上一個函數
void?search(BTree?*root);???//搜索解
//void?updateUnion();?//更新集合
void?freeMem(BTree?*root);
void?printResult();?//輸出結果

void?BTree::generateChild(BTree?*root){
????BTree?*node=new?BTree();
????root->rchild=node;
????node->parent=root;
????node->x=Q[q[l]-1];

????for(int?i=1;i????????BTree?*node2;
????????//注意最左結點
????????if(i=q[l]-1){
????????????node->lchild=NULL;
????????}
????????else{
????????????node2=new?BTree();
????????????node->rchild=NULL;
????????????node->lchild=node2;
????????????node2->parent=node;
????????????node2->x=Q[q[l]-i-1];
????????????node=node2;
????????}
????}
????//更新?XQ
????sortByJudge(X);
????Q.clear();
????//May?be?a?bug.
????copy(X.begin()X.begin()+q[l]back_inserter(Q));
????//計算J表
????for(int?i=0;i????for(int?i=0;i????????J[X[i]=calJudge(XX[i]);
????}
????subUnion(XQ);??//更新集合X
}

void?init(){
????//初始化r和d
????r[0]=D;r[D-d]=0;
????for(int?i=0;i????for(int?i=0;i????????q[i]=r[i]-(D-d-i-1);
????????r[i+1]=r[i]-q[i];
????}
????B=0;
}

void?search(BTree?*root){
????l=0;
????while(l>=0){
????????q[l]=r[l]-(D-d-l-1);
????????sortByJudge();??//排序并更新集合X
????????//判斷下一層是否到達葉結點,更新界值
????????if(l+1==D-d){
????????????if(J[q[l]-1]>B){
????????????????B=J[q[l]-1];
????????????????updatePath(root->

評論

共有 條評論