【问题标题】:Creating the number of shortest paths in a directed Graph在有向图中创建最短路径的数量
【发布时间】:2016-01-14 16:03:39
【问题描述】:

我的作业是使用 c 语言创建从 S 到有向图中任何其他顶点的最短路径数

图表显示为 txt 文件,如下所示:

3 // number of vertex in G
{2,3},{1},{} // in the first {} we can see the neighbors for V1 , in the second for V2 and so on

我必须为 s 打印一个最短路径数的数组

我使用的算法类似于 BFS,并添加了一些内容: numOfShortest(G,S)

for vertex x which belongs to gropu V-S 
do color[x]=white, d[x]=0, F[x]=0
color[s]=gray,d[s]=0,F[s]=1
while Q is not empty //= let Q be a queue
 do u=dequeue(Q)
  for each vertex v = N(u) // = for every neighbor of u
   do if color[v] = white 
    then color[v]= gray, d[v]=d[u]+1 
       F[v]=f[v]+f[u] // = v must have atleast the same number of paths as u
       enqueue(Q,v)
      else if color[v]=gray 
       then if d[u] < d[v]
        then f[v]=f[v]+f[u]
  color[u]=black // = when finished with every N(u) 

现在我必须考虑一些事情(如果我错了,请纠正我)

  • 使用链表实现入队
  • 为每个包含邻居的 v 创建一个名为 vertex 的结构 (使用动态数组)
  • 我需要以某种方式将写入文件的邻居扫描到 结构顶点上的邻居

也许我在准备方面做得太过分了,有一种更简单的方法可以做到这一点,我脑子里有些混乱。 感谢谁能帮忙

【问题讨论】:

    标签: c directed-graph breadth-first-search


    【解决方案1】:

    您应该开始了解 Dijkstra 算法,以获得从一个顶点 S 到图中每个其他顶点的最短路径。

    然后也许将它与类似 BFS 的算法混合会帮助你计算你的意思。

    【讨论】:

      【解决方案2】:

      您可以使用二维数组来存储整个图形。

      int a[][] 二维数组。

      由于这是你的任务,我不会给你代码,但可以提供一种方法——如何存储图表。

      首先分配给每个g[i][j]=0;这意味着 j 不是 i 的邻居。

      然后获取变量中的节点数,并使用循环来获取序列中的邻居。并将邻居保存在数组中,即用于您的输入文件。

      NumOfNode = 3
      
      a[1][2] = 1;  
      a[1][3] = 1;
      
      a[2][1] = 1;
      

      在你的算法中,如果你得到a[i][j] 是 1,那么就有一条从 i 到 j 的路径。如果a[i][j] 为0,则没有从i 到j 的路径。

      这个link 可以帮助你。

      【讨论】:

      • 谢谢,但我忘了提到代码复杂度需要 O(V+E)
      • @ItayZaguri 您可以在图表a[][] 上使用适合您复杂性的任何算法。我刚刚向您展示了如何将图形从文件存储到数组中。如果你想实现算法,然后谷歌它。代码很多。
      猜你喜欢
      • 1970-01-01
      • 2017-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多