Java程序始终挂在相同的随机位置

时间:2014-12-12 00:32:43

标签: java graph edge

我必须做一个总共会生成30个图形的程序,其中5个具有10个独特边缘,5个具有20个独特边缘,等等达到60个。然后,我必须在每个图形中获取平均数量的组件。 5个图表。但是,我的节目一直挂在同一个地方。正是在它试图完成第16个图形和第11个边缘时,它始终是失败的。我忽略了连接组件静态方法,因为这与问题无关,我相信。请注意,这是早期优化副本的草稿,两者都挂在同一个地方。

首先,我创建一个图表,其中需要26个顶点,然后将相同的图形放入数组中的30个点中,然后将唯一边放入每个图中。

edgeIs方法和indexIs方法在我正在使用的ADT图中。

以下是代码:

import ch05.queues.LinkedUnbndQueue;
import ch05.queues.UnboundedQueueInterface;

import java.util.Random;

public class UniqueEdgeGraph2 {

public static void main (String[] args) {


    final int numGraphs2 = 5;
    int numEdges = 10;
    double sum = 0;
    int index = 0;

    Random rand = new Random();
    int randomNum1 = 0, randomNum2 = 0, flag = 0;
    UnweightedGraph<Integer>[] graphArray = (UnweightedGraph<Integer>[]) new UnweightedGraph[30];

    UnweightedGraph<Integer> graph;

  for (int i = 0; i < 30; i++)
     graphArray[i] = new UnweightedGraph<Integer>();

  for (int i = 0; i < 30; i++)
    for (int j = 0; j < 26; j++)
           graphArray[i].addVertex(j);

    for (int i = 0; i < 6; i++) { // it is done 6 times because 30 graphs are needed in total and numGraphs is 5
        for (int j = 0; j < numGraphs2; j++) {
            for (int k = 0; k < numEdges; k++) {
                while (flag == 0) {
                     randomNum1 = rand.nextInt(26);
                     randomNum2 = rand.nextInt(26);
                     if (graphArray[index].edgeIs(randomNum1, randomNum2) == false) {
                        graphArray[index].addEdge(randomNum1, randomNum2);
                        flag = 1;
                     }
                }   
                flag = 0;
            }
            sum += CountConnectedComponents(graphArray[index]);
            index++;
        }
            System.out.println("Average # of Connected Components for five graphs with " + numEdges + " unique edges is: "
                    + sum/5.0);
            sum = 0;
            numEdges += 10;

    }   
}

public boolean edgeIs(T fromVertex, T toVertex)
  // If edge from fromVertex to toVertex exists, returns true
  // otherwise, returns false.
  {
    int row;
    int column;

    row = indexIs(fromVertex);
    column = indexIs(toVertex);
    return (edges[row][column]);
  }

 private int indexIs(T vertex)
  // Returns the index of vertex in vertices.
  {
    int index = 0;
    while (!vertex.equals(vertices[index]))
      index++;
    return index;
  }

1 个答案:

答案 0 :(得分:0)

我弄清楚错误是什么。我指的是所有30个数组索引的相同图形。因此,我没有制作30个不同的图形,而是将整个数组指向一个图形。这使得最终无法找到一个独特的边缘,这导致了无限循环,而不是像我想象的那样悬挂。

我编辑了代码以反映我为使其工作所做的更改。它仍然是粗糙的形状,但它只需要清理。

感谢所有评论的人。