在矩阵

时间:2018-05-04 19:36:41

标签: matrix graph graph-algorithm adjacency-matrix jung

我有一个方形平面晶格,表示为NxN网格图。在Jung中是否有任何方法可以获得特定顶点的对称对(给定对称轴)。示例:8-> 0,5-> 3。 我的目标是获得不同的节点对。由于对(4,1),(4,7),(4,3)和(4,5)基本相同。 (1,3)与(3,7)等相同。也许某些算法可以在矩阵上执行,然后转换为图。

3x3 example

2 个答案:

答案 0 :(得分:0)

一般图表并不特别适合这类事物,因为它们没有内置的行,列,轴对称等概念;他们全都是关于拓扑而不是几何。

如果你真的想要这样的东西,你应该创建一个具有你想要的操作的Graph的子类型,并创建一个匹配的实现,或者只是创建相应的矩阵(以及从矩阵位置到图节点的映射)而是对该矩阵进行操作。

答案 1 :(得分:0)

到目前为止,我能够编写一个算法,将矩阵旋转3次,并在固定索引处跟踪节点。可以使用节点的视觉坐标而不是索引为任何类型的Graph编写相同的内容。

fun rotateMatrix(matrix: List<IntArray>): List<IntArray> {/*---*/}
val reflections = mutableListOf<Pair<Number, Number>>()
(0..2).fold(mat) { a, b ->
        val new = rotateMatrix(a)
        mat.forEachIndexed { x, e ->
            e.forEachIndexed { y, e2 ->
                reflections.add(mat[x][y] to new[x][y])
            }
        }
        new
    }

结果是描述(0,2,8,6)是“相同”的关系; (1,5,3,7)是相同的。剩下要做的唯一事情是使用输出来确定哪些节点对应哪些反射兄弟。