我的作业是使用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)
现在我必须考虑一些事情(纠正我,如果我错了)
答案 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可能会对您有所帮助。