⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mfset.h

📁 out< "please input the number of the nodes"<<endl cin>>nodesNum cout<<"pl
💻 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 + -