【发布时间】:2017-03-15 17:43:23
【问题描述】:
对于一个标题来说,这是一个很大的问题,但在这里。我面临着从输入流中读取一堆无向边和一些顶点并输出一组边的问题。我输出的边集不能有任何“空白” - 我的意思是我不能有 (1,2)、(2, 4) 和 (4, 5) 的边集顶点#3 永远不会在顶点集中被提及。
不允许使用此图,因为 2 将是“空白”
此图是允许的,因为连通图中没有“空白”。有 4 个顶点,编号从 1 到 4。 此图的输出将是 [[1, 3][3, 4][4, 2][2, 1]]
到目前为止,我的处理方式如下:
当我知道有多少个顶点时,我将它们的所有索引添加到包含所有孤立顶点的 HashSet 中。 当我从输入流中读取边时,我从 HashSet 中删除了每条边的两个顶点。 之后,我将它们添加到具有维度 (|V|, 2) 的二维数组中。 如果在我接受所有边之后有任何孤立的顶点,我会调用我的“重新排序方法”。
它的作用如下;
- 以二维矩阵和孤立顶点集作为输入
- 调用我的帮助方法 findMatrixProperties(),它通过嵌套循环一次遍历整个矩阵一个元素来查找矩阵的最大值以及不同顶点的数量。
- 然后我使用 (while matrixMax > nrOfVertices) 进入我的 while 循环
- 在我的 while 循环中,我遍历整个矩阵,用孤立的顶点将所有最大值替换为 HashSet 的最小值。
- 在完成矩阵的完整迭代后,我删除了孤立顶点集中的最小值并再次调用 findMatrixProperties()。
伪this是(程序本身是用Java编写的)
reorderMethod(matrix M, isolated vertex set I)
matrixProperties = findMatrixProperties(M) // matrixProperties is an instance of a helper class MatrixProperty which holds two integers, max and nrOfVertices
while (max > nrOfVertices)
for row in M
for col in M
if M[col, row] = max:
M[col, row] = min(I)
// Remove min(I) from I
matrixProperties = findMatrixProperties(M)
有什么方法可以让这件事变得更有效率吗?
【问题讨论】:
-
我很困惑为什么第二张图是被允许的 - 是不是有一个“空白”,因为从来没有提到过 5?
-
另外,为什么你可以在第一个图中设置边 (1, 2),因为它不是图中的边?
-
你能提供第二个允许图的输出吗?
-
对于具有 5 个顶点和单个 [1, 2] 边的图,您将输出什么?
-
所以我可以看到您只允许图形具有单个组件,其边的顶点索引是连续的并且从 1 开始,不是吗?
标签: java algorithm multidimensional-array graph-theory