主题:我的最优二叉树算法会出现回路啊?
源代码如下:
#include <stdio.h>
#include<stdlib.h>
#include <string.h>
#include <conio.h>
#define max_size 100
typedef int status;
typedef struct krus {
int node1;//边的起始顶点
int node2;//边的终止顶点
int vex;//
}krus ;
typedef struct PTNode {//树的结点结构
int data;
int parent;//双亲位置
}PTNode;
typedef struct PTree {//树的结构
PTNode nodes[max_size];
int n; //结点数
}PTree;
typedef PTree MFSet;
int initptree(MFSet* p) {//初始化操作,构建PTree
int i;
(*p).n=8;
for(i=0;i<8;++i) {
(*p).nodes[i].data=i;
(*p).nodes[i].parent=-1;
}return 0;
}
int find_mfset(MFSet S,int i) {//找集合S中i所在子集的根
int j;
if(i<1||i>S.n||j>S.n) return -1;
for(j=i;S.nodes[j].parent>0;j=S.nodes[j].parent);
return j;
}
int merge_mfset(MFSet &S,int i,int j)
{//S.node[i]和S.node[j]分别为S的互不相交的两个子集Si和Sj的根结点
//求并集SiUSj
if(i<1||i>S.n||j>S.n) return -1;
else S.nodes[i].parent=j;
return 1;
}
#include <stdio.h>
#include<stdlib.h>
#include <string.h>
#include <conio.h>
#define max_size 100
typedef int status;
typedef struct krus {
int node1;//边的起始顶点
int node2;//边的终止顶点
int vex;//
}krus ;
typedef struct PTNode {//树的结点结构
int data;
int parent;//双亲位置
}PTNode;
typedef struct PTree {//树的结构
PTNode nodes[max_size];
int n; //结点数
}PTree;
typedef PTree MFSet;
int initptree(MFSet* p) {//初始化操作,构建PTree
int i;
(*p).n=8;
for(i=0;i<8;++i) {
(*p).nodes[i].data=i;
(*p).nodes[i].parent=-1;
}return 0;
}
int find_mfset(MFSet S,int i) {//找集合S中i所在子集的根
int j;
if(i<1||i>S.n||j>S.n) return -1;
for(j=i;S.nodes[j].parent>0;j=S.nodes[j].parent);
return j;
}
int merge_mfset(MFSet &S,int i,int j)
{//S.node[i]和S.node[j]分别为S的互不相交的两个子集Si和Sj的根结点
//求并集SiUSj
if(i<1||i>S.n||j>S.n) return -1;
else S.nodes[i].parent=j;
return 1;
}