8月12日————最短路

这个写的很好:http://blog.csdn.net/zhongyanghu27/article/details/8221276

dijkstra算法:

先给出一个无向图

用Dijkstra算法找出以A为起点的单源最短路径步骤如下

 

 

 

 

 

算法模板:

void dijkstra(int x)
{
    int i,j;
    memset(vis,0,sizeof(vis));
    for( i=0;i<= max_city;i++ )
        dis[i] = map[x][i];
    dis[0] = 0;
    for( i=1;i<=max_city;i++ )
    {
        int p = x,temp = inf;
        for( j=1;j<=max_city;j++ )
        {
            if( !vis[j] && dis[j] < temp )
            {
                p = j;
                temp = dis[j];
            }
        }
        vis[p]=true;
        for( j=1;j<=max_city;j++ )
        {
            if( map[p][j]!=inf )
            {
                if( dis[j] > dis[p]+map[p][j] )
                    dis[j] = dis[p]+map[p][j];
            }
        }
    }
}
View Code
floyd算法模板
void folyd(){  
        for(int k = 1 ; k <= n ; k++){/*枚举n个点来更新dis*/  
            for(int i = 1 ; i <= n ; i++){  
                for(int j = 1 ; j <= n ; j++)  
                  if(dis[i][k] != -1 && dis[j][k] != -1)/*如果在求最大值的时候加上这一句*/  
                     dis[i][j] = min(dis[i][k]+dis[k][j] , dis[i][j]);   
            }   
       }  
 }  
View Code

 训练题目;http://acm.hdu.edu.cn/diy/contest_show.php?cid=24386

posted on 2014-08-27 16:58  bqly  阅读(113)  评论(0编辑  收藏  举报

导航