I'm trying to write a recursive function (printPath
) inside another function (dijkstraSSSP
), but it gives me a compiler error.
When I run gcc dijkstra.c WGraph.c PQueue.c
, it compiles just fine. However, when I run dcc -Wall -Werror -std=c11 -o dijkstra dijkstra.c WGraph.c PQueue.c
. I got this error:
dijkstra.c:48:38: error: function definition is not allowed here
void printPath (int currentNode) {
Which I think it is because I define a function inside another function. If this is the case, how should I modify the code? Thanks a lot!
void dijkstraSSSP(Graph g, Vertex source) {
int dist[MAX_NODES];
int pred[MAX_NODES];
bool vSet[MAX_NODES]; // vSet[v] = true <=> v has not been processed
int s, t;
PQueueInit();
int nV = numOfVertices(g);
for (s = 0; s < nV; s++) {
joinPQueue(s);
dist[s] = VERY_HIGH_VALUE;
pred[s] = -1;
vSet[s] = true;
}
dist[source] = 0;
int relaxWeight;
for (s = 0; s < numOfVertices(g); s++) {
s = leavePQueue(dist);
//printf("iterating with s = %d\n", s);
//printf("updating vSet[%d] = false\n", s);
vSet[s] = false;
for (t = 0; t < numOfVertices(g); t++) {
//printf("iterating with t = %d\n", t);
//printf("checking if s = %d is adj to t = %d and vSet[%d] = true\n", s, t, t);
if (adjacent(g, s, t) != 0 && vSet[t] == true) {
//printf("YES\n");
relaxWeight = adjacent(g, s, t);
if (dist[t] > dist[s] + relaxWeight) {
//printf("updating dist[%d] = dist[%d] + adjWeight[%d]\n", t, s, relaxWeight);
dist[t] = dist[s] + adjacent(g, s, t);
//printf("updating pred[%d] = %d\n", t, s);
pred[t] = s;
}
}
}
}
void printPath (int currentNode) {
if (pred[currentNode] == -1) {
printf("%d", currentNode);
return;
} else {
printPath (pred[currentNode]);
printf("-%d", currentNode);
}
}
for (int i = 0; i < numOfVertices(g); i++) {
if (dist[i] == VERY_HIGH_VALUE) {
printf("%d: no path\n", i);
} else{
printf("%d: distance = %d, shortest path: ", i, dist[i]);
printPath(i);
printf("\n");
}
}
}