使用java从哈希集中查找连接的矩形
我有一个用自定义矩形对象(“名称”、中心X、中心Y、宽度、高度)填充的哈希集。我写了一个方法来确定两个矩形是否连接(接触/相交)。但是我想得到所有的矩形,它们是一个组。例如:如果rectA与rectB相连,那么RectC与rectB相连,而不是直接与rectA相连。它们都是连接的,因为rectB是公共的 我能找到有直接联系的形状。但我想得到一个组,其中还包括具有辅助连接的形状。我假设递归在这种情况下很有用,但还不能解决它。有什么解决方案/建议吗使用java从哈希集中查找连接的矩形,java,recursion,Java,Recursion,我有一个用自定义矩形对象(“名称”、中心X、中心Y、宽度、高度)填充的哈希集。我写了一个方法来确定两个矩形是否连接(接触/相交)。但是我想得到所有的矩形,它们是一个组。例如:如果rectA与rectB相连,那么RectC与rectB相连,而不是直接与rectA相连。它们都是连接的,因为rectB是公共的 我能找到有直接联系的形状。但我想得到一个组,其中还包括具有辅助连接的形状。我假设递归在这种情况下很有用,但还不能解决它。有什么解决方案/建议吗 public static void canItb
public static void canItbeGroup(HashSet<RECTANGLE> ipRectangles)
{
Deque<RECTANGLE> ipDeque = new ArrayDeque<>(ipRectangles);
for (RECTANGLE currRectangle : ipDeque)
{
Set<String> tempGrpMbrShapeID = new HashSet<>();
RECTANGLE tempRect = ipDeque.pop();
for (RECTANGLE r : ipDeque)
{
if (tempRect.areShapesFriend(r))
{
tempGrpMbrShapeID.add(r.shapeID);
tempGrpMbrShapeID.add(tempRect.shapeID);
}
}
if (tempGrpMbrShapeID.size() > 1)
{
System.out.println(tempGrpMbrShapeID);
}
}
}
public static void main(String[] args)
{
HashSet<RECTANGLE> rectHS = new HashSet<>();
RECTANGLE aRect = new RECTANGLE("a", 3, 2, 2, 2);
RECTANGLE aInnerRect = new RECTANGLE("aIn", 3, 2, 1, 1);
RECTANGLE bRect = new RECTANGLE("b", 5, 3, 2, 2);
RECTANGLE cRect = new RECTANGLE("c", 7, 3, 2, 2);
RECTANGLE dRect = new RECTANGLE("d", 4, 5, 4, 2);
RECTANGLE eRect = new RECTANGLE("e", 11, 3, 2, 2);
RECTANGLE fRect = new RECTANGLE("f", 11, 6, 2, 2);
RECTANGLE gRect = new RECTANGLE("g", 13, 3, 2, 2);
RECTANGLE hRect = new RECTANGLE("h", 4, 8, 2, 2);
RECTANGLE iRect = new RECTANGLE("i", 14, 1, 2, 2);
RECTANGLE jRect = new RECTANGLE("j", 16, 7, 2, 2);
RECTANGLE kRect = new RECTANGLE("k", 15, 6, 2, 2);
RECTANGLE lRect = new RECTANGLE("l", 8, 8, 2, 2);
RECTANGLE mRect = new RECTANGLE("m", 5, 10, 2, 2);
rectHS.add(aRect);
rectHS.add(bRect);
rectHS.add(cRect);
rectHS.add(eRect);
rectHS.add(dRect);
rectHS.add(fRect);
rectHS.add(gRect);
rectHS.add(aInnerRect);
rectHS.add(hRect);
rectHS.add(iRect);
rectHS.add(jRect);
rectHS.add(kRect);
rectHS.add(lRect);
rectDQ.add(aRect);
rectDQ.add(bRect);
rectDQ.add(cRect);
rectDQ.add(dRect);
rectDQ.add(eRect);
canItbeGroup(rectHS);
}
我需要这群人作为我的助手
[a,b,aIn,c,d], [e,g,i], [j,k]
我不会为你解决这个问题,但我会给你一个大致的方法
集合
。这实际上是您已经完成的工作,但是您需要存储它们,以便合并集合,而不是在找到集合后立即打印组i
),并将每个组与每个其他组进行比较(j
)i
包含j
的任何项目,则合并集合(将j
的所有项目放入i
,并从j
中删除所有项目)我不会为你解决这个问题,但我会给你一个大致的方法
集合
。这实际上是您已经完成的工作,但是您需要存储它们,以便合并集合,而不是在找到集合后立即打印组i
),并将每个组与每个其他组进行比较(j
)i
包含j
的任何项目,则合并集合(将j
的所有项目放入i
,并从j
中删除所有项目)非常感谢。这起作用了。但是你能推荐任何使用递归的解决方案吗。我是递归新手,谢谢。这起作用了。但是你能推荐任何使用递归的解决方案吗。我不熟悉递归。
[a,b,aIn,c,d], [e,g,i], [j,k]