【问题标题】:Coding the adjacency matrix for a graph in java and counting triangles在java中为图形编码邻接矩阵并计算三角形
【发布时间】:2017-12-31 05:48:18
【问题描述】:

我的编程经验很少,所以为了练习,我想通过用二维数组编码邻接矩阵来在 java 中“构建”一个图形。具体来说,我想构建在https://www.cut-the-knot.org/arithmetic/combinatorics/Ramsey44.shtml 找到的红色图,但是我编码的内容使矩阵中的边数少于应有的边数。这是我目前所拥有的:

public static int[][] createGraph(){

int[][] graph = new int[17][];
for(int i=0; i<17; i++){
  graph[i] = new int[i+1];
}

for(int i = 0; i<17; i++){
  for(int j = 0; j<=i; j++){
    if(i-j == 1 || i-j == 2 || i-j == 4 || i-j == 8){
      graph[i][j] = 1;

    }
  }
}
return graph;

图中有 68 条边,所以邻接矩阵的下三角形应该有 68 个 1,这是我正在尝试构建的,但是当我手动计算它们时,当我打印它时,我发现其中 59 个。我不知道为什么缺少边缘。我猜根据列号和行号之间的差异分配边缘与网站中的“顶点之间的差异”不同。我应该怎么做?

我的下一个练习是计算图中三角形的数量。我对如何做到这一点有一个想法,但我能得到一个提示吗?

【问题讨论】:

  • 您将构造限制为矩阵的一个三角形,但您可能不会将连接节点的索引对的构造限制为矩阵的另一半。 - 查看打印输出:不会有带有|i-j|&gt;8 的索引对,这是错误的。

标签: java graph-theory adjacency-matrix


【解决方案1】:

您将构造限制为矩阵的一个三角形,但您可能不会将连接节点的索引对构造限制在矩阵的其他部分,即|i-j| &lt;= 8 的对角线“条带”。因此:

if(i-j == 1 || i-j == 2  || i-j == 4  || i-j == 8 ||
   i-j == 9 || i-j == 13 || i-j == 15 || i-j == 16){

【讨论】:

  • 啊,这很有道理,所以应该有重叠,因为这应该只增加 9 个,而不是我的数量的两倍?另外,如果我构造完整的邻接矩阵而不是仅仅下半部分,对我来说会更简单吗?
  • 扩展测试不会产生下三角形之外的数组元素。 - 如果您填充整个矩阵,它不会有太大变化,因为您只需添加 graph[i][j] 的设置。
  • 谢谢!我现在数了所有的68个!我现在将处理我的第二部分。我查了一下,这是一个比预期更难计算的问题。
猜你喜欢
  • 1970-01-01
  • 2018-02-11
  • 2018-10-14
  • 2018-04-21
  • 2023-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多