求助一个关于用graph输出最少路径的程序
以下是一个给出起始地和目标地,然后输出中间经过地方最少的一条路,当给出max(路途长短)时,还要再进行判断,输出最佳路线但我的程序只能输出经过地方只有一个的情况,如果中间经过多个地点程序就无法输出,希望有大神可以指教和改正
程序代码:int findPath(Graph g, Vertex src, Vertex dest, int max, int *path) //src是起始地,dest是目的地,谢谢!!!
{
assert(g != NULL && validV(g,src) && validV(g,dest));
Queue q = newQueue();
QueueJoin(q, mkEdge(g, src, dest, g->edges[src][dest]));
int isFound = 0;
int i, j;
int *visited = calloc(g->nV, sizeof(int));
Vertex *best = malloc((g->nV)* sizeof(Vertex));
for(i = 0; i < g->nV; i++){ //将所有值设为-1,判断是否已经游历过
visited[i] = -1;
}
while(!isFound){
if(visited[i]) continue; //如果已经游历过,进行下一个
visited[i] = 1;
for(i = 0; i < g->nV; i++) {
if(g->edges[src][i] > max || visited[i] == 1 || g->edges[src][i] == 0) continue; //判断起始地和i是否符合条件
visited[i] = src;
if(i == dest){
isFound = 1; //退出循环,如果找到目的地
break;
}
QueueJoin(q, mkEdge(g, src, i, g->edges[src][i]));
}
if(QueueIsEmpty(q)){
return -1; // no path found //如果q是空的,则没有路径
}
}
j = 0;
while(i > 0){ //跟踪他来自何处
best[j] = i;
i = visited[i];
j++;
}
j--;
for(i = 0; j > -1; j--){
path[i] = best[j]; //反转array
i++;
}
free(visited);
return *path; //输出路径
}

