📄 mfset.h
字号:
//MFSet.h
#include <iostream.h>
#include "ParentTree.h"
#define OK 1
#define YES 1
#define FALSE 0
#define ERROR 0
#define OVERFLOW -2
//------------划分等价类对集合进行的几个基本操作------
//--初试化----
void Initial(PTree &S){
cout<<"请输入结点的个数(小于100)"<<endl;
cin>>S.n;
for(int i=1;i<=S.n;i++){
cout<<"请输入结点的数据域: ";
cin>>S.nodes[i].data;
cout<<"请输入结点 "<<S.nodes[i].data<<" 的双亲位置: ";
cin>>S.nodes[i].parent;
}//for
}//Initial
//--确定i(结点的序号)所在的子集,并将从i至根路径上所有结点都变成根的孩子结点。
short fix_mfset(PTree &S,int i){
if(i<1||i>S.n) return -1;
for(int j=i;S.nodes[j].parent>0;j=S.nodes[j].parent);
int t;
for(int k=i;k!=j;k=t){
t=S.nodes[k].parent; S.nodes[k].parent=j;
}
return j;
}//fix_mfset
//---S.nodes[i]和S.nodes[j]分别是S的互不相交的两个子集Si和Sj的根结点,求并集。---
short mix_mfset(PTree &S,int i,int j){
if(i<1||i>S.n||j<1||j>S.n) return ERROR;
if(S.nodes[i].parent>S.nodes[j].parent){
S.nodes[j].parent+=S.nodes[i].parent;
S.nodes[i].parent=j;
}//if
else{
S.nodes[i].parent+=S.nodes[j].parent;
S.nodes[j].parent=i;
}//else
return OK;
}//mix_mfset
//---遍历----
void traverse(PTree S){
for(int i=1;i<=S.n;i++){
cout<<S.nodes[i].data<<'\t';
cout<<S.nodes[i].parent<<endl;
}//for
}//traverse
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -