c++并查集实现

来源:互联网 发布:java架构师招聘 编辑:程序博客网 时间:2024/06/05 11:08
#include <iostream>#include <map>#include <vector>std::map<int,int> mergeSearch;std::multimap<int,int> graph;void init()// 测试数据{    graph.insert(std::pair<int,int> (1,2));    graph.insert(std::pair<int,int> (2,3));    graph.insert(std::pair<int,int> (5,6));    graph.insert(std::pair<int,int> (4,7));}int cnt(0);void mark(){    for(auto a:graph)//三种情况 节点两个都不存在,第一个存在和第二个存在    {        if(mergeSearch[a.first] == 0 && mergeSearch[a.second] == 0)            {                mergeSearch[a.first]  = ++cnt;                mergeSearch[a.second]  = cnt;            }        else if(mergeSearch[a.first] == 0 && mergeSearch[a.second])            mergeSearch[a.first] = mergeSearch[a.second];        else             mergeSearch[a.second] = mergeSearch[a.first];    }}int main(){    init();    mark();    for(auto x:mergeSearch)    {        std::cout<<"节点"<<x.first<<":"<<x.second<<std::endl;    }}
0 0
原创粉丝点击