并查集算法

简介:
#include <iostream>
#include <cstring>
#include <string>
using namespace std;

const int MAX_NUM = 100;
string name[MAX_NUM];
int group[MAX_NUM];
int rank[MAX_NUM];

void MakeSet()
{
	for (int i = 0; i < MAX_NUM; ++i)
	{
		group[i] = i;
		rank[i] = 0;
	}
}

int FindGroup(int i)
{
	if (group[i] == i)
	{
		return group[i];
	}

	group[i] = FindGroup(group[i]);
}

int MyFoundGroup(int i)
{
	return group[i];
}

void Union(int i, int j)
{
	int g1 = FindGroup(group[i]);
	int g2 = FindGroup(group[j]);

	if (rank[g1] > rank[g2])
	{
		group[j] = g1;
	}
	else
	{
		group[i] = g2;
		if (rank[g1] == rank[g2])
		{
			rank[g2]++;
		}
	}
}

bool JudgeGroup(string name1, string name2)
{
	int index1 = -1;
	int index2 = -1;

	for (int i = 0; i < MAX_NUM; ++i)
	{
		if (name1 == name[i])
		{
			index1 = i;
			break;
		}
	}

	for (int i = 0; i < MAX_NUM; ++i)
	{
		if (name2 == name[i])

		{
			index2 = i;
			break;
		}
	}

	return MyFoundGroup(group[index1]) == MyFoundGroup(group[index2]);
}

int main()
{
	name[0]="小明";
	name[1]="小王";
	name[2]="小军";
	name[3]="小丽";
	name[4]="小李";
	MakeSet();
	Union(0,1);
	Union(2,1);
	Union(3,4);

	string name1,name2;
	cin >> name1 >> name2;

	if(JudgeGroup(name1,name2))
	{
		cout << name1 << " 和 " << name2 << "是队友." << endl;
	}
	else
	{
		cout << name1 << " 和 " << name2 << "不是队友" << endl;
	}

	system("pause");
	return 0;
}

目录
相关文章
|
8月前
|
机器学习/深度学习 存储 算法
【算法沉淀】刷题笔记:并查集 带权并查集+实战讲解
【算法沉淀】刷题笔记:并查集 带权并查集+实战讲解
|
8月前
|
算法
并查集的实现【学习算法】
并查集的实现【学习算法】
50 0
|
4月前
|
算法 JavaScript 前端开发
第一个算法项目 | JS实现并查集迷宫算法Demo学习
本文是关于使用JavaScript实现并查集迷宫算法的中国象棋demo的学习记录,包括项目运行方法、知识点梳理、代码赏析以及相关CSS样式表文件的介绍。
第一个算法项目 | JS实现并查集迷宫算法Demo学习
|
3月前
|
存储 算法 Python
火箭般的提升!学会Python并查集,让你的算法能力飞跃新高度!
火箭般的提升!学会Python并查集,让你的算法能力飞跃新高度!
47 1
|
4月前
|
算法 计算机视觉 Python
Python并查集大揭秘:让你在算法界呼风唤雨,秒杀一切复杂场景!
在编程与算法的广袤天地中,总有一些工具如同神兵利器,能够助你一臂之力,在复杂的问题前游刃有余。今天,我们就来深入探讨这样一件神器——Python并查集(Union-Find),看看它是如何让你在算法界呼风唤雨,轻松应对各种复杂场景的。
90 2
|
6月前
|
算法 计算机视觉 Python
Python并查集大揭秘:让你在算法界呼风唤雨,秒杀一切复杂场景!
【7月更文挑战第18天】并查集是Python中解决集合动态合并与查询的利器,常用于复杂问题。例如,在社交网络中快速判断用户是否在同一朋友圈,通过路径压缩优化的`UnionFind`类实现。另外,计算图像中岛屿数量也可借助并查集,将相邻像素合并成集合。并查集的应用显示了其在算法中的高效和灵活性,是提升编程技能的关键工具。
63 2
|
6月前
|
存储 算法 Python
火箭般的提升!学会Python并查集,让你的算法能力飞跃新高度!
【7月更文挑战第17天】并查集,高效解决集合合并查询问题,常用于图的连通性判断。Python实现关键包含查找和合并操作。初始化时,元素各自为集合。查找使用路径压缩优化,合并则可选按秩策略保持平衡。例如,检测无向图环路,遍历边,若并查集发现边两端已在同一集合,则存在环。掌握并查集,提升算法能力,助你在问题解决中一飞冲天!动手实践,成为算法达人!
72 2
|
8月前
|
算法 C++
c++算法学习笔记 (16) 并查集
c++算法学习笔记 (16) 并查集
|
7月前
|
算法
【经典LeetCode算法题目专栏分类】【第9期】深度优先搜索DFS与并查集:括号生成、岛屿问题、扫雷游戏
【经典LeetCode算法题目专栏分类】【第9期】深度优先搜索DFS与并查集:括号生成、岛屿问题、扫雷游戏
|
8月前
|
算法 测试技术
并查集算法
并查集算法

热门文章

最新文章