求助一个关于用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; //输出路径 }