6-1 Shortest Path [1]

Write a program to find the unweighted shortest distances from any vertex to a given source vertex in a digraph.

Format of functions:

void ShortestDist( LGraph Graph, int dist[], Vertex S );


where LGraph is defined as the following:

typedef struct AdjVNode *PtrToAdjVNode;
};

typedef struct Vnode{

typedef struct GNode *PtrToGNode;
struct GNode{
int Nv;
int Ne;
};
typedef PtrToGNode LGraph;


The shortest distance from V to the source S is supposed to be stored in dist[V]. If V cannot be reached from S, store -1 instead.

Sample program of judge:

#include <stdio.h>
#include <stdlib.h>

typedef enum {false, true} bool;
#define MaxVertexNum 10  /* maximum number of vertices */
typedef int Vertex;      /* vertices are numbered from 0 to MaxVertexNum-1 */

};

typedef struct Vnode{

typedef struct GNode *PtrToGNode;
struct GNode{
int Nv;
int Ne;
};
typedef PtrToGNode LGraph;

LGraph ReadG(); /* details omitted */

void ShortestDist( LGraph Graph, int dist[], Vertex S );

int main()
{
int dist[MaxVertexNum];
Vertex S, V;

scanf("%d", &S);
ShortestDist( G, dist, S );

for ( V=0; V<G->Nv; V++ )
printf("%d ", dist[V]);

return 0;
}

/* Your function will be put here */


Sample Input (for the graph shown in the figure):

7 9
0 1
0 5
0 6
5 3
2 1
2 6
6 4
4 5
6 5
2


Sample Output:

1 1 0 3 2 2 1


源码：

int asked[MaxVertexNum];
void ShortestDist( LGraph Graph, int dist[], Vertex S )
{
int i,j;
for(i=0;i<Graph->Nv;i++)
{
dist[i]=100;
}
dist[S]=0;
while(p)
{
p=p->Next;
}
while(1)
{
int min=100;
int minindex=-1;
for(i=0;i<Graph->Nv;i++)
{
{
min=dist[i];
minindex=i;
}
}
if(minindex==-1)break;

while(t)
{
t=t->Next;
}
}

for(i=0;i<Graph->Nv;i++)
{
if(dist[i]==100)
dist[i]=-1;
}
}


©️2019 CSDN 皮肤主题: 黑客帝国 设计师: 上身试试