【问题标题】:Implementing Floyd-Warshall algorithm for a list of vertices为顶点列表实现 Floyd-Warshall 算法
【发布时间】:2014-11-24 10:47:45
【问题描述】:

我试图从顶点列表中返回传递闭包,但我如何使用 floyd warshall 算法来做到这一点?互联网上的所有示例都是以二维数组形式给出的,但它也可以用于列表吗?示例 G = ABCD --> G+ = AB AC AD BC BD CD,其中 G 是顶点列表,G+ 是传递闭包。

我的实现(错误的方式):

 public Graph transitiveClosure(LinkedList<Vertex> v)
  {

      String graaf = "";      
      Edge e;
      StringBuffer sb = new StringBuffer(graaf);

      Iterator<Vertex> i = v.iterator();
      Vertex tmp;
      for(Vertex vertex : v)
      {
         System.out.print(vertex);
      }

         while(i.hasNext()) {         
        int next = (v.size() + 1) - v.size();                                        
         tmp =(Vertex) i.next();

         if(tmp == v.getFirst()) 
        tmp = (Vertex)i.next();
        e = new Edge(v.getFirst().toString() + tmp);                        
        sb.append(e); 

         if(tmp == v.get(next)) 
         next++;
         e = new Edge(v.get(next).toString() + tmp);
         sb.append(e);


    }

      System.out.println();

      return new Graph(sb.toString());
      }              
} 

【问题讨论】:

  • 请解释一下你的例子。您是否只想要 v 列表中索引 i
  • 是的,我需要所有配对

标签: java graph


【解决方案1】:

由于您想要所有对 (i,j),其中 i 和 j 是 i 低于 j 的索引,我不太明白您为什么要在这里使用 Floyd-Warshall。

int size = v.size();
StringBuffer sb = new StringBuffer(graaf);
for (int i=0;i<size;i++) {
   for (int j=i+1;j<size;j++) {
      sp.append(v.get(i)+v.get(j)+" ");
   }
}

【讨论】:

    猜你喜欢
    • 2015-11-19
    • 1970-01-01
    • 1970-01-01
    • 2014-06-28
    • 2016-01-18
    • 1970-01-01
    • 2018-11-11
    • 1970-01-01
    • 2014-10-16
    相关资源
    最近更新 更多