| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1426 人关注过本帖
标题:求助一个关于用graph输出最少路径的程序
只看楼主 加入收藏
cyy06180521
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2015-8-21
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:3 
求助一个关于用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;          //输出路径          
}
    
2016-05-01 11:26
zhulei1978
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:53
帖 子:1351
专家分:1200
注 册:2006-12-17
收藏
得分:20 
你把全部代码贴上来

其实我就是改变社会风气,提高少女素质,刺激电影市道,提高年轻人内涵,玉树临风,风度翩翩的整蛊专家,我名叫古晶,英文名叫JingKoo!
2016-05-02 06:46
cyy06180521
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2015-8-21
收藏
得分:0 
回复 2楼 zhulei1978
已经解决了,不过还是谢谢
2016-05-02 13:58
zhulei1978
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:53
帖 子:1351
专家分:1200
注 册:2006-12-17
收藏
得分:0 
恩,好的

其实我就是改变社会风气,提高少女素质,刺激电影市道,提高年轻人内涵,玉树临风,风度翩翩的整蛊专家,我名叫古晶,英文名叫JingKoo!
2016-05-02 16:13
快速回复:求助一个关于用graph输出最少路径的程序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018794 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved