/*
问题描述:给定一个数组,以及数组A,B,要求计算出S被划分的等价类子集
来源:网易算法课
作者:syt
问题描述:给定一个数组,以及数组A,B,要求计算出S被划分的等价类子集
来源:网易算法课
作者:syt
日期:2017-9-26
思路:
方法1 参照视频课程里的方法,开始将每个数当成一个集合,当出现两个数等价时,将两个数的集合合并,以此类推,最后形成等价类,但程序有个问题,可以打印出来每个集合看看,可以发现并不是每个集合都包含了所有的等价类元素,可能是我考虑不够周全,望大家能指出问题所在,不胜感激
方法2 利用链表,将每个等价类放子在一个链表中,将链表的头保存,最后通过遍历链表头将等价类打印出来
*/
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
//方法1,效果不是很好,会出现在一些集合中不是包含所有的元素
class Number{
public:
int val;
bool visted = false;
vector<int> vec;
Number(int val)
{
this->val = val;
vec.push_back(val);
}
};
class EquivalClass{
private:
vector<Number> number;
void makeVec(Number& a, Number& b)
{
a.vec.insert(a.vec.end(), b.vec.begin(), b.vec.end());
sort(a.vec.b