不相交集问题

时间:2013-02-08 08:23:37

标签: java kruskals-algorithm disjoint-sets

我正在尝试使用不相交集来编写Kruskal算法的实现。我想我几乎可以使用它,但我似乎无法使代码的一部分正常工作。代码需要检查图表上的节点是否已经在尝试添加到的集合中;否则,你不想添加它。这是我正在使用的代码:

public static boolean difSets(int index1, int index2, ArrayList<Node> sets[], Node nodes[])
{
    int setnum1 = 0;
    int setnum2 = 0;
    for(int i = 0; i < nodes.length; i++)
    {
        for(int j = 0; j < sets[i].size(); j++)
        {
            if(nodes[index1].getX() == sets[i].get(j).getX() && nodes[index1].getY() == sets[i].get(j).getY());
                setnum1 = i;
            if(nodes[index2].getX() == sets[i].get(j).getX() && nodes[index2].getY() == sets[i].get(j).getY());
                setnum2 = i;
        }
    }
    if(setnum1 == setnum2)
        return false;
    else
        return true;
}

一点信息:此方法确定两个节点是否已在同一组中。 nodes数组包含图上的所有点(Node是一个只存储x和y值的类,可以检索它们.Setset是一个ArrayLists节点数组。在问题开始时,每个节点都在一个ArrayList本身;最后,它们都应该在同一个ArrayList中。索引1和2对应于Nodes数组中的节点。

不幸的是,这段代码似乎没有给我正确的输出;我一直盯着它看了一个多小时,我无法弄清楚问题是什么,所以我希望有人可以帮助我。

提前致谢。

1 个答案:

答案 0 :(得分:0)

解决了它。 java中的许多内容之一对我来说毫无意义。

public static boolean difSets(int index1, int index2, ArrayList<Node> sets[], Node nodes[])
{
    int setnum1 = 0;
    int setnum2 = 0;
    int x1 = nodes[index1].getX();
    int y1 = nodes[index1].getY();
    int x2 = nodes[index2].getX();
    int y2 = nodes[index2].getY();
    for(int i = 0; i < nodes.length; i++)
    {
        for(int j = 0; j < sets[i].size(); j++)
        {
            int x3 = sets[i].get(j).getX();
            int y3 = sets[i].get(j).getY();
            if(x1 == x3 && y1 == y3)
                setnum1 = i;
            if(x2 == x3 && y2 == y3)
                setnum2 = i;
        }
    }
    if(setnum1 == setnum2)
        return false;
    else
        return true;
}

这应该与我以前完​​全一样。尽管如此...