判断两个人是否属于同一支球队的队友
程序员文章站
2022-03-10 09:19:12
...
Solution:
判断两个人是否是队友,实际上就是一个并查集问题。过程可以参考:https://www.cnblogs.com/noKing/p/8018609.html
package com.bishi;
public class Main {
/**
* 判断两个元素是否同属于一个集合。
*/
public static void isConnected(int[] id,int firstElement, int secondElement) {
if(id[firstElement] == id[secondElement]){
System.out.println("Yes");
}else{
System.out.println("Not Sure");
}
}
/**
* 合并两个元素所在的集合,也就是连接两个元素
*/
public static void unionElements(int[] id,int firstElement, int secondElement,int n) {
//找出firstElement所在的集合
int firstUnion = id[firstElement];
//找出secondElement所在的集合
int secondUnion = id[secondElement];
//如果这两个不是同一个集合,那么合并。
if (firstUnion != secondUnion) {
//遍历数组,使原来的firstUnion、secondUnion合并为secondUnion
for (int i = 0; i < n; i++) {
if (id[i] == firstUnion) {
id[i] = secondUnion;
}
}
}
}
/**
* 本并查集使用数组实现,为了更直观地看清内部数据,采用打印数组
*/
private static void printArr(int[] ids) {
for (int id : ids) {
System.out.print(id + "\t");
}
System.out.println();
}
public static void main(String[] args) {
int n=10;//总共多少个人
int[] id = new int[n];
for (int i = 0; i < n; i++) {
id[i] = i;
}
System.out.println("初始:");
printArr(id);
System.out.println("1和2是队友");
unionElements(id,1, 2,n);
printArr(id);
System.out.println("2和3是队友");
unionElements(id,2, 3,n);
printArr(id);
System.out.println("1和3是队友");
unionElements(id,1, 3,n);
printArr(id);
System.out.println("5和6是队友");
unionElements(id,5, 6,n);
printArr(id);
System.out.println("4和7是队友");
unionElements(id,4, 7,n);
printArr(id);
System.out.println("1和2是否是队友?");
isConnected(id,1, 2);
System.out.println("1和3是否是队友?" );
isConnected(id,1, 3);
System.out.println("2和7是否是队友?");
isConnected(id,2, 7);
}
}
Output:
推荐阅读