在有向图形

时间:2016-01-14 16:03:40

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

我的作业是使用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的结构 (使用动态数组)
  • 我需要以某种方式扫描写在文件上的邻居 struct vertex上的邻居
也许我对准备工作做得太过分了,有一个更简单的方法可以做到这一点,我脑子里有些乱七八糟。 感谢无论谁提供帮助

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

您可以使用2D数组存储整个图形。

int a[][] 2D数组。

由于这是你的任务,我不打算给你代码,但可以给出一种方法 - 如何存储图表。

首先分配给每个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可能会对您有所帮助。