这个写的很好: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]; } } } }
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]); } } }
训练题目;http://acm.hdu.edu.cn/diy/contest_show.php?cid=24386
时间: 2024-10-11 07:46:46